【发布时间】:2019-09-14 10:20:51
【问题描述】:
有一个FreeRTOS library for Arduino,据称甚至可以在 UNO 上运行。
我试图了解多任务操作系统如何在如此有限的硬件上运行的内部工作原理。我了解任务调度/切换的原理,但内核实际上是如何暂停一个任务以执行另一个任务?它如何中断(然后恢复)当前正在执行的代码?
我的猜测是一个调度的ISR(定时器)直接修改栈来改变指令指针,但是如果这样做的话,需要在切换任务前先复制栈和寄存器,然后恢复当前任务的栈/registers 在恢复执行之前。我不清楚它会如何做到这一点。
FreeRTOS 内核能否在例如Serial.println() 函数调用(或任何不包括cli() 的调用)中间切换任务?如果可以,它是如何做到的?
感谢您的澄清。
【问题讨论】:
标签: arduino multitasking freertos