如我错了请纠正我:
据我在网上搜索,微控制器(如 Arduino)和 SBC(如 Raspberry Pi)之间的主要区别在于,微控制器是原子的,这意味着它逐行运行代码,不执行任何其他操作,没有延迟。但是SBC(例如RPi)运行一个操作系统,并且操作系统不是原子的,这意味着它将安排您的代码运行,因为操作系统还必须执行其他工作,您的代码可能会延迟运行,具体取决于如何操作系统很忙。
因此,对于一些项目,例如飞行控制器,我们应该使用微控制器,以便无人机能够立即对我们的命令和传感器数据做出反应,没有任何延迟。
有些主板(例如 BeagleBone)具有能够运行操作系统的 CPU,以及一个或多个能够执行原子操作的微控制器。这意味着您可以用一块板获得两个世界。
现在这是我的问题:
在运行Linux操作系统的多核CPU上,我们可以告诉Linux内核只为一个进程保留一个核心吗?假设我有一个在 Raspberry Pi 上控制无人机的 Python 程序,我可以告诉 Linux 为自己使用四个核心中的三个,并为我的飞行控制器程序使用一个核心吗?我说得有道理吗?
我知道 Linux 作业优先级和一些实时 Linux 内核,但我还没有详细研究这些选项。我将不胜感激有关此主题的任何指导,谢谢。
答案1
原则上,微控制器与通用 CPU 没有什么不同。微控制器还处理中断,这会抢占代码流,因此您不能指望精确的周期计时。您还可以在微控制器上安装调度程序,这取决于操作系统。您提到的 Beaglebone 上的可编程实时单元 (PRU) 是一个非常专业的处理器,专为周期精确操作而设计,而不是“普通”微控制器。
您也许能够将进程固定到特定的 CPU 核心,但这并不意味着该进程可以获得对核心的独占访问权限。在 Linux 上你真正想要的是实时调度。只需对控制过程使用更高的优先级,您就可能会成功。