背景

什么是微控制器?

微控制器是芯片上的系统。而你的电脑是由几个分立的组件组成的:处理器、RAM、硬盘驱动器、以太网端口等。 微控制器将所有这些组件内置在单个"芯片"或封装中。这使得可以用最少的部件数构建系统。

你能用微控制器做什么?

许多事!微控制器是所谓的"嵌入式系统"的核心部分。嵌入式系统无处不在,但您通常不会注意到它们。 他们控制着洗衣服、打印文件和做饭的机器。 嵌入式系统使您生活和工作的建筑物保持在舒适的温度下, 并控制使您行驶的车辆停停走走的组件。

大多数嵌入式系统无需用户干预即可运行。即使他们像洗衣机一样暴露用户界面;他们的大部分操作都是自己完成的。

嵌入式系统通常用于控制物理过程。为了使这成为可能,他们有一个或多个设备来告诉他们世界的状态("传感器"),以及 一个或多个允许他们改变事物的设备 ("执行器")。例如,建筑气候控制系统可能具有:

我什么时候应该使用微控制器?

上面列出的许多嵌入式系统都可以使用运行Linux的计算机 (例如"Raspberry Pi")来实现。 为什么要改用微控制器?听起来开发程序可能更难。

主要原因是成本。微控制器比通用计算机便宜得多。不仅微控制器更便宜;它还需要更少的外部电气部件来操作。 这使得印刷电路板(PCB)更小,设计和制造成本更低。

另一个主要原因是功耗。微控制器消耗的功率比成熟的处理器少几个数量级。如果您的应用程序将使用电池运行,这将产生巨大的差异。

最后但并非最不重要的是:(硬件)实时限制。某些过程要求其控制器在一定时间间隔内对某些事件做出响应 (例如四旋翼机/无人机被阵风击中)。如果没有达到这个"最后期限",这个过程可能会以灾难性的失败告终(例如无人机坠毁在地)。 运行通用操作系统的通用计算机在后台运行许多服务。这使得很难保证在严格的时间限制内执行程序。

什么时候应该使用微控制器?

涉及繁重计算的地方。为了保持低功耗,微控制器可用的计算资源非常有限。例如,一些微控制器甚至没有对浮点运算的硬件支持。 在这些设备上,执行单精度数字的简单加法可能需要数百个CPU周期。

为什么使用Rust而不是C?

希望我不需要在这里说服您,因为您可能熟悉Rust和C之间的语言差异。我确实想提出一点是包管理。 C缺乏官方的、被广泛接受的包管理解决方案,而Rust有Cargo。这使得开发更加容易。而且,IMO,简单的包管理鼓励代码重用,因为 库可以很容易地集成到应用程序中,这也是一件好事,因为库得到了更多的"战斗测试"。

为什么我不应该使用Rust?

或者为什么我应该更喜欢C而不是Rust?

C生态系统更加成熟。针对几个问题的现成解决方案已经存在。如果您需要控制对时间敏感的过程,您可以使用现有的商业实时操作系统 (RTOS) 之一来解决您的问题。 Rust中还没有商业的生产级RTOS,因此您必须自己创建一个或尝试其中一个正在开发中的RTOS。