Multithreading 单核与多核处理器上的固件开发

Multithreading 单核与多核处理器上的固件开发,multithreading,multicore,firmware,Multithreading,Multicore,Firmware,假设我正在为某人家里的智能恒温器开发固件。当前的实现是一个在单核处理器上运行的多线程解决方案(因为我很熟悉Cortex-M),我正在使用一些现成的RTO 如果我把这个项目转移到一个双核/多核处理器上,它是如何工作的?我是否只是告诉RTO哪些线程应该在每个核心上运行,RTO从那里管理所有线程?是否需要在每个线程上进行一定量的重构,以便在多核环境中更有效地工作?或者RTO只是将任何处于就绪状态的线程带到一个有空闲时间的内核上运行该任务吗?一般来说,在多核机器上运行这一事实并不重要。由操作系统将线程调

假设我正在为某人家里的智能恒温器开发固件。当前的实现是一个在单核处理器上运行的多线程解决方案(因为我很熟悉Cortex-M),我正在使用一些现成的RTO


如果我把这个项目转移到一个双核/多核处理器上,它是如何工作的?我是否只是告诉RTO哪些线程应该在每个核心上运行,RTO从那里管理所有线程?是否需要在每个线程上进行一定量的重构,以便在多核环境中更有效地工作?或者RTO只是将任何处于就绪状态的线程带到一个有空闲时间的内核上运行该任务吗?

一般来说,在多核机器上运行这一事实并不重要。由操作系统将线程调度到可用的内核。当然,您的RTO需要支持多核平台


这里有一个问题:如果您的代码不能正确处理并发性,特别是如果它不能正确处理内存障碍,那么您可能会遇到错误,这些错误被隐藏在一个内核上串行运行的事实中。一旦你把第二个核心加入到混合中,任何这样的错误都会浮出水面,但通常他们会在重要的演示或发布后先做。因此,请设计您的代码,以便通过构造使其不会出现并发错误。

我想说,这是无法回答的。当然,这完全取决于您使用的调度程序(“RTO”)的支持和功能。你有没有考虑过“RoTs”的文档?另外,一个“智能恒温器”的应用听起来并不像当初证明多核的使用是合理的。@ JimMyb考虑到芯片上的多核系统的价格和可用性,我认为不需要太多的“正当化”。你可以花10美元买到一个,包括DRAM。想想在Raspberry Pi这样的平台上运行的恒温器,智能恒温器只是问我问题的一个例子。我的假设是它是由调度程序处理的。我只是想弄清楚多核上的任务是如何工作的。我意识到它可能依赖于RTOS,但我认为可能有一些常见的做法。@KubaOber我想你可以很容易地用1-2美元范围内的控制器完成恒温器的工作。通常,我看不出许多嵌入式应用程序需要强大的CPU或SOC。恒温器就是一个很好的例子。因此,我的建议是,首先要把代码弄清楚,使用可用的硬件外围设备(避免软件PWM&c),从轮询转向中断驱动,永远不要使用忙等待,也许可以将浮点数减少到实际需要的数量。您可能会获得大量的空闲CPU时间。(请不要使用Arduino。)