Arm cortex-m4 定制 os 设计
Arm cortex-m4 custom os desgin
我正在为 ARM Cortex-M4 核心写一个小的 os 并且有一些疑问。我决定通过主管调用 (SVC) 放置 os 功能,我在其中保留和维护所有内核对象和内核函数。
但是,这是个好主意吗,因为所有内核代码都会执行并占用用户任务堆栈?
我唯一想到的是在执行内核代码时通过主管调用跳转到内核堆栈并锁定调度程序。这种方法好吗?
在 Cortex-M 上,您有一个进程堆栈指针 (PSP) 和一个主堆栈指针 (MSP)。中断使用主堆栈指针,任务应使用进程堆栈指针。因此,在 SVC 中完成的任何内核工作都使用 MSP,因此不应干扰使用 PSP 的任务堆栈。切换任务时,您将 PSP 设置为新堆栈。我会阅读 Cortex-M4 通用用户指南的异常处理部分。此外,我建议获取并阅读《ARM Cortex 权威指南》M3/M4,因为其中有一个很好的部分介绍了 RTOS。 Cortex 采用 RTOS 设计并提供许多有用的功能。
注意:除非您将此作为学习练习,或者只是真的想编写自己的 OS,否则您最好使用经过充分测试的 FreeRTOS 之类的东西并提供您可能会使用的所有功能。
我正在为 ARM Cortex-M4 核心写一个小的 os 并且有一些疑问。我决定通过主管调用 (SVC) 放置 os 功能,我在其中保留和维护所有内核对象和内核函数。
但是,这是个好主意吗,因为所有内核代码都会执行并占用用户任务堆栈?
我唯一想到的是在执行内核代码时通过主管调用跳转到内核堆栈并锁定调度程序。这种方法好吗?
在 Cortex-M 上,您有一个进程堆栈指针 (PSP) 和一个主堆栈指针 (MSP)。中断使用主堆栈指针,任务应使用进程堆栈指针。因此,在 SVC 中完成的任何内核工作都使用 MSP,因此不应干扰使用 PSP 的任务堆栈。切换任务时,您将 PSP 设置为新堆栈。我会阅读 Cortex-M4 通用用户指南的异常处理部分。此外,我建议获取并阅读《ARM Cortex 权威指南》M3/M4,因为其中有一个很好的部分介绍了 RTOS。 Cortex 采用 RTOS 设计并提供许多有用的功能。
注意:除非您将此作为学习练习,或者只是真的想编写自己的 OS,否则您最好使用经过充分测试的 FreeRTOS 之类的东西并提供您可能会使用的所有功能。