2封底估算 在系统设计面试中,有时会要求你使用"封底估算"(back-of-the-envelopeestimation)来估算系统容量或性能需求。根据谷歌高级研究员杰夫-迪恩(JeffDean)的说法,"封底估算是你结合思想实验和常见性能数字进行的估算,目的是让你对哪些设计能满足你的要求有一个良好的感觉"。 2.1常用单位 2的方次 近似值 全称 简称 10 Thousand 千字节(Kilobyte) KB 20 Million 兆字节(Megabyte) MB 30 Billion 千兆字节(Gigabyte) GB 40 Trillion 太字节(Teraby...

  NJnxCrUH2njg   2023年11月01日   34   0   0 架构设计

5设计一致哈希(HASHING) 要实现横向扩展,就必须在服务器之间高效、均匀地分配请求/数据。一致哈希是实现这一目标的常用技术。不过,首先让我们深入了解一下这个问题。 5.1重散列(rehashing)问题 如果有n台缓存服务器,平衡负载的常用方法是使用下面的散列方法: serverIndex=hash(key)%N,其中N是服务器池的大小。 当服务器池的大小固定且数据分布均匀时,这种方法效果很好。但是,当添加新服务器或移除现有服务器时,问题就会出现。例如,如果服务器1离线,服务器池的大小就会变成3。这意味着当服务器1离线时,大多数缓存客户端会连接到错误的服务器来获取数据。这将导致缓存丢...

  NJnxCrUH2njg   2023年11月01日   25   0   0 架构设计

4设计限速器 在网络系统中,限速器用于控制客户端或服务发送流量的速率。在HTTP世界中,限速器限制在指定时间内允许发送的客户端请求数量。如果API请求数超过了限速器定义的阈值,超出调用都会被阻止。下面是几个例子: 用户每秒最多只能写2篇文章。 同一IP地址每天最多只能创建10个账户。 同一设备每周最多可申请5次奖励。 本章将要求您设计限速器。在开始设计之前,我们首先了解一下使用API限速器的好处: 防止拒绝服务(DoSDenialofService)攻击造成的资源枯竭。 几乎所有大型科技公司发布的API都会强制执行某种形式的速率限制。例如,Twitter将推文数量限制为每3小时300条...

  NJnxCrUH2njg   2023年11月01日   43   0   0 架构设计

3系统设计面试 你刚刚获得了梦想公司梦寐以求的现场面试机会。HR给你发来了当天的日程安排。扫了一眼名单,你感觉良好,直到你的目光落到了这个面试环节--系统设计面试。 系统设计面试通常让人望而生畏。可能是"设计一款知名产品X"这样含糊不清的问题。问题模棱两可,似乎宽泛得不合理。你的疲惫是可以理解的。毕竟怎么可能有人会在一小时内设计出一款流行产品,而这款产品可是花费了成百上千名工程师的心血? 好在没人指望你能做到。现实世界的系统设计极其复杂。例如,谷歌搜索简单得令人难以置信;然而,支撑这种简单性的技术之多却着实令人吃惊。如果没人指望你在一小时内设计出一个真实世界的系统,那么系统设计面试又有什么好处...

  NJnxCrUH2njg   2023年11月01日   53   0   0 架构设计

1简介 主要内容 了解PowerPoint 了解PowerPoint屏幕和功能区 访问后台(backstage) 创建演示文稿 查看演示大纲 保存和关闭工作 从硬盘驱动器检索演示文稿 帮助 退出PowerPoint 1.1PowerPoint是什么? PowerPoint是MicrosoftOffice附带的程序。有三种方式可以获得PowerPoint的副本: 订阅微软的Office365 Office365是一种基于云的订阅服务,可让您使用MicrosoftOffice套件中的各种产品。订阅Office365的主要优点是每月或每年支付的费用较低(低至每月6.99美元或每年69.99美...

  NJnxCrUH2njg   2023年11月01日   38   0   0 读书区

2快速入门 你将需要IDE来编写你的代码。我们推荐初学者使用ArduinoIDE。虽然它不是最好的IDE,但它可以完成工作,而且对初学者来说是直接和容易使用的。在熟悉了ArduinoIDE并发展到更复杂的项目后,你可能会发现利用VSCode与Platformio插件来代替它更为方便。 如何为ESP32编程? 可以使用不同的固件和编程语言来为ESP32编程。你可以采用: ArduinoC/C,使用ESP32的Arduino核心。 EspressifIDF(IoT开发框架) Micropython JavaScript LUA ... 在本节中,我们将看到如何使用ESP32板的Arduino核...

  NJnxCrUH2njg   2023年11月01日   63   0   0 开源研究

0书籍简介 这本实践指南将为你提供最重要的功能知识,以使实时操作系统(RTOS)在微控制器(MCU)上启动和运行。如果你有兴趣学习如何通过使用实际硬件的实例来实现RTOS的应用,并讨论常见的性能与开发时间的权衡,那么你就来对地方了!我们将使用自由RTOS来实现代码! 我们将使用FreeRTOS内核实现代码,使用低成本的STMNucleo开发板与流行的STM32ARMMCU一起工作,并使用SEGGER调试工具调试/分析代码。本书中使用的所有工具都是经过挑选的,因为它们对于刚刚入门的业余爱好者或专业人士来说很容易获得,同时也因为它们在现实世界的专业团队中很受欢迎。你通过阅读本书和通过实例获得的知识...

  NJnxCrUH2njg   2023年11月01日   124   0   0 嵌入式

2了解RTOS任务 超级循环编程范式通常是嵌入式系统工程师最先接触到的编程方法之一。用超级循环实现的程序有一个单一的顶层循环,在系统需要执行的各种功能之间循环。这些简单的while循环很容易创建和理解(当它们很小的时候)。在FreeRTOS中,任务与超级循环非常相似--主要区别在于,系统可以有一个以上的任务,但只有一个超级循环。 在本章中,我们将仔细研究超级循环和用它们实现一定程度的并行性的不同方法。之后,将对超级循环和任务进行比较,并从理论上介绍任务执行的思维方式。最后,我们将看看任务是如何通过RTOS内核实际执行的,并比较两种基本的调度算法。 超级循环编程介绍 所有的嵌入式系统都有一个共同...

  NJnxCrUH2njg   2023年11月01日   51   0   0 嵌入式

3任务信令和通信机制 在本章中,将简要介绍任务信号和任务间通信的核心机制。这些基元是事件驱动的并行编程的基础,它是基于RTOS的应用程序良好实现的基础。 与其直接进入FreeRTOS的API,不如将每个基元与一些图形例子和一些关于每个机制可被使用的建议一起介绍。不要担心:在后面的章节中,我们将进入使用API的细枝末节。现在,让我们把注意力集中在基本原理上。 实时操作系统队列 队列的概念相当简单,但它们也非常强大和灵活,特别是如果你传统上用C语言在裸机上编程的话。在其核心,队列只是一个循环缓冲区。然而,这个缓冲区包含一些非常特殊的属性,比如原生的多线程安全,每个队列可以灵活地容纳任何类型的数据,...

  NJnxCrUH2njg   2023年11月01日   87   0   0 嵌入式

4选择正确的MCU 本章是关于微控制器单元(MCU)选择的速成课程,主要针对那些没有深厚硬件背景的工程师。它并不试图成为一份详尽的清单,列出你在为新项目选择硬件时需要知道和考虑的一切。它确实提供了关于区分和选择MCU设备的许多因素的介绍。最后,你将了解足够多的关键考虑因素,以便有效地研究MCU并与团队中的硬件工程师讨论潜在的候选人。通过加强硬件/固件合作,并在第一时间为项目选择合适的MCU,你将避免硬件重新设计和进度延误。 我们将首先介绍为你的项目选择一个合适的MCU所要考虑的广泛因素。之后,我们将讨论不同开发硬件之间的权衡。对STM32系列进行简短的介绍,以显示供应商如何倾向于对其产品系列进...

  NJnxCrUH2njg   2023年11月01日   37   0   0 嵌入式

选择IDE 集成开发环境(IDEintegrateddevelopmentenvironment)有能力极大地影响开发。集成开发环境被设计成具有较小的学习曲线,并且通常提供一种简单的方法来从现有的驱动程序和中间件建立解决方案。 在本章中,我们将讨论如何选择IDE,看看不同类型的IDE,并选择一个IDE来创建你在本书所用的代码包中发现的所有源代码。 下面是我们将涉及的主要议题的快速列表: 集成开发环境的选择标准 平台抽象的IDE 开放源代码/免费IDE 专有的IDE 为本书选择IDE IDE选择标准 有些工程师喜欢不使用IDE,而是把他们最喜欢的文本编辑器和命令行编译器或链接器(如GCC或C...

  NJnxCrUH2njg   2023年11月01日   73   0   0 嵌入式

0简介 本书的内容 第1章,ESP32入门,向你介绍一般的物联网技术、ESP32硬件和开发环境选项。第2章,与地球对话--传感器和执行器,讨论了不同类型的传感器和执行器,以及如何将它们与ESP32连接。第3章,令人印象深刻的显示输出,解释了如何在ESP32项目中选择和使用不同的显示类型。FreeRTOS也被详细讨论。第4章,深入研究高级功能,包括ESP32的音频/视频应用,以及满足低功耗要求的电源管理子系统。第5章,实践--你的房间的多传感器,是本书的第一个参考项目,其中几个传感器被集成到ESP32设备。第6章,好朋友--Wi-Fi,展示了如何在Wi-Fi的站点和接入点模式下使用ESP32。在...

  NJnxCrUH2njg   2023年11月01日   147   0   0 嵌入式

https://www.beningo.com/4-tactics-to-unit-test-rtos-tasks/ 超过50%的嵌入式软件项目使用实时操作系统(RTOS)。不幸的是,使用RTOS会给使用现代开发技术(如测试驱动开发(TDD)、DevOps或自动测试)的开发者带来一些问题。例如,当开发者试图为他们的任务编写测试时,他们遇到的第一个问题是任务函数包含一个无限循环!任何直接调用任务函数的测试都会被认为是一个无限循环!因此,任何直接调用任务函数的测试将永远不会完成。这篇文章将探讨对RTOS任务进行单元测试的几种策略,其中包括: 循环的重新定义 完成信号 任务排除 通过OSAL使用主...

  NJnxCrUH2njg   2023年11月01日   87   0   0 嵌入式

2工具链 工具链是嵌入式Linux的第一个元素,也是你项目的起点。你将用它来编译所有将在你的设备上运行的代码。你在这个早期阶段做出的选择将对最终结果产生深远的影响。你的工具链应该能够通过使用处理器的最佳指令集来有效地利用你的硬件。它应该支持你所需要的语言,并对便携式操作系统接口(POSIX)和其他系统接口有一个坚实的实现。你的工具链应该在整个项目中保持不变。换句话说,一旦你选择了你的工具链,就一定要坚持下去。在一个项目中以不一致的方式改变编译器和开发库会导致微妙的错误。也就是说,当发现安全缺陷或错误时,最好还是要更新你的工具链。获得工具链可以像下载和安装TAR文件一样简单,也可以像从源代码构建...

  NJnxCrUH2njg   2023年11月01日   125   0   0 嵌入式

什么是调度 调度器决定哪个线程被允许在任何时间点上执行;这个线程被称为当前线程。 在不同的时间点有机会改变当前线程的身份。这些点被称为重新安排点。一些潜在的重排点是: 从运行状态过渡到暂停或等待状态,例如通过k_sem_take()或k_sleep()。 过渡到准备状态,例如通过k_sem_give()或k_thread_start()。 处理完中断后返回到线程上下文 调用k_yield() 当线程主动发起将自身转换为暂停或等待状态的操作时,它就会进入睡眠状态。 每当调度器改变了当前线程的身份,或者当前线程的执行被ISR所取代时,内核会首先保存当前线程的CPU寄存器值。当线程后来恢复执行时...

  NJnxCrUH2njg   2023年11月01日   52   0   0 嵌入式

RTOS的必要性 当你开始增加你的嵌入式应用的功能时,在单一的主循环和一些中断例程中做所有的事情变得越来越难。通常情况下,下一级的复杂性是某种状态机,你的电子设备的输出会根据这个(内部)状态而改变。如果你需要能够同时操作多个复杂的输入和输出呢?一个很好的例子是TCP/IP连接,通过这个连接,你将接收某种数据,然后用来操作机械臂、控制电动机、发送信号......很快就会发现,需要新的抽象层次,以避免淹没在实现这种东西所需的复杂性中。这就是实时操作系统发挥作用的地方。 Zephyr与其他实时操作系统不同? Zephyr是由Linux基金会支持的。 通过学习Zephyr,你将自动获得对Linux内...

  NJnxCrUH2njg   2023年11月01日   87   0   0 嵌入式

RTOS简介 1.1背景 在大型计算机的世界里,操作系统(OSoperatingsystems)已经存在了相当长的一段时间。最基本的操作系统可以追溯到20世纪50年代。到20世纪70年代中期,操作系统的概念、结构、功能和界面已经非常成熟。 微型系统大约在1970年出现。在基于微处理器的设备中迅速应用操作系统似乎是合乎逻辑的。然而到直到20世纪80年代中期,几乎没有任何此类应用采用了可称为正式设计的实时操作系统。诚然,CP/M于1975年发布,后来由英特尔公司投入芯片。但它对实时领域的影响甚微;它的天然归宿是台式机。 有两个因素影响了实时操作系统的普及,一是机器的限制,另一个是围绕微型机的设计文...

  NJnxCrUH2njg   2023年11月01日   37   0   0 嵌入式

1机器人简介 我们将制作一个机器人,并为其创建程序,赋予机器人行为,使其看起来具有智能并能够做出决策。我们将编写代码,使用传感器观察机器人周围的环境,并构建高级主题的实际示例,包括视觉、语音识别和说话。 您将看到简单的构建技术如何与少量代码相结合,使机器感觉像某种宠物。你还将看到当机器出错时如何进行调试。您还将了解如何让机器人向您反馈问题,以及如何选择您想要演示的行为。我们将为它连接一个手柄,让它进行语音控制,最后还将教你如何计划进一步的机器人制作。 在开始制作机器人之前,我们应该先了解一下什么是机器人。我们可以探索一些机器人类型,以及区分机器人和其他机器的基本原理。你会想一想机器人和非机器人...

  NJnxCrUH2njg   2023年11月01日   124   0   0 嵌入式

2探索机器人-代码和电子设备 我们将拆开一个机器人,看看它的部件和系统。我们将探索机器人的各个组成部分,包括软件(代码、命令和程序库)和硬件,以及它们是如何组合在一起的。在开始制作机器人时,考虑你想要的部件以及它们之间的关系是很有价值的。我建议您绘制机器人的草图--框图,作为连接代码和部件的指南,我们将在本章对此进行探讨。 在本章中,我们将讨论以下主题: 了解机器人内部结构 探索机器人组件类型 探索控制器和输入/输出 规划组件和代码结构 规划实体机器人 请准备: 简单的绘图材料,如笔和纸 可选绘图软件,如Draw.io(免费,网址:https://app.diagrams.net)或In...

  NJnxCrUH2njg   2023年11月01日   81   0   0 嵌入式

3探索RaspberryPi 本章将涉及以下主题: 探索RaspberryPi的功能 选择连接 什么是RaspberryPiOS? 为RaspberryPiOS准备SD卡 3.1探索RaspberryPi的功能 控制器将决定机器人的输入和输出类型、电子设备的功率要求、可使用的传感器类型以及运行的代码。更改控制器可能意味着重写代码、重新设计控制器的安装位置以及更改电源要求。 RaspberryPi是一系列专为教育领域设计的小型计算机。它既是一台完整的计算机,又有用于连接定制硬件的输入/输出引脚,因此深受创客(指喜欢制作机器人和小玩意儿等业余爱好的人)的喜爱。与标准计算设备相比,微控制器的成本...

  NJnxCrUH2njg   2023年11月01日   76   0   0 嵌入式
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~