我正在为ARM Cortex-M4核心编写一个小操作系统,并有一些疑问。我决定通过监督程序调用( Supervisor Call,SVC)将os功能放在其中,在这里保存和维护所有内核对象和内核函数。
但是,这是个好主意吗?因为所有内核代码都执行并占用用户任务堆栈?
我唯一想到的是,在执行内核代码时,通过监督者调用跳转到内核堆栈并锁定调度程序。这个方法好吗?
发布于 2016-07-05 07:06:37
在Cortex-M上,有一个进程堆栈指针(PSP)和一个主堆栈指针(MSP)。中断使用主堆栈指针,任务应该使用进程堆栈指针。因此,在SVC中完成的任何内核工作都使用MSP,因此不应该干扰使用PSP的任务堆栈。切换任务时,将PSP设置为新堆栈。我会阅读Cortex-M4通用用户指南的异常处理部分。此外,我还建议您阅读ARM Cortex M3/M4的最终指南,因为这是关于RTOS的一个很好的部分。Cortex是用RTOS设计的,提供了许多有用的功能。
注意:除非是作为一个学习练习,或者只是想编写自己的操作系统,否则最好使用像FreeRTOS这样的东西,它经过了很好的测试,并提供了您可能使用的所有特性。
https://stackoverflow.com/questions/38192632
复制相似问题