【发布时间】:2016-07-05 15:06:37
【问题描述】:
我正在为ARM Cortex-M4内核写一个小操作系统,有一些疑问。我决定通过主管调用(SVC)来放置操作系统功能,我在其中保存和维护所有内核对象和内核函数。
但是,这是一个好主意吗,因为所有内核代码都会执行并占用用户任务堆栈?
我唯一想到的是,在执行内核代码时,通过主管调用跳转到内核堆栈并锁定调度程序。这种方法好不好?
【问题讨论】:
-
您要解决的问题是什么?
我正在为ARM Cortex-M4内核写一个小操作系统,有一些疑问。我决定通过主管调用(SVC)来放置操作系统功能,我在其中保存和维护所有内核对象和内核函数。
但是,这是一个好主意吗,因为所有内核代码都会执行并占用用户任务堆栈?
我唯一想到的是,在执行内核代码时,通过主管调用跳转到内核堆栈并锁定调度程序。这种方法好不好?
【问题讨论】:
在 Cortex-M 上,您有一个进程堆栈指针 (PSP) 和一个主堆栈指针 (MSP)。中断使用主堆栈指针,任务应使用进程堆栈指针。因此,在 SVC 中完成的任何内核工作都使用 MSP,因此不应干扰使用 PSP 的任务堆栈。切换任务时,您将 PSP 设置为新堆栈。我会阅读 Cortex-M4 通用用户指南的异常处理部分。此外,我建议获取并阅读 The Definitive Guide to the ARM Cortex M3/M4,因为这对 RTOS 有一个很好的部分。 Cortex 采用 RTOS 设计,提供了许多有用的功能。
注意:除非您将此作为学习练习,或者只是真的想编写自己的操作系统,否则您最好使用 FreeRTOS 之类的东西,它经过了很好的测试并提供了您可能会使用的所有功能.
【讨论】: