2016-07-04 33 views
0

我正在为ARM Cortex-M4内核编写一个小型操作系统,并且有一些疑问。我决定通过Supervisor Call(SVC)来放置os功能,在这里我保留并维护所有内核对象和内核函数。Arm cortex-m4自定义操作系统设计

但是,这是一个好主意,因为所有内核代码都执行并占用用户任务堆栈吗?

唯一让我想到的是,在执行内核代码时,通过主管调用跳转到内核堆栈并锁定调度器。这种方法很好吗?

+1

你试图解决什么问题? –

回答

1

在Cortex-M上,您有一个进程堆栈指针(PSP)和一个主堆栈指针(MSP)。中断使用主堆栈指针,任务应该使用进程堆栈指针。因此,在SVC中完成的任何内核工作都使用MSP,因此不应干扰使用PSP的任务堆栈。切换任务时,您将PSP设置为新堆栈。我将阅读Cortex-M4通用用户指南的异常处理部分。另外,我建议您阅读并阅读ARM Cortex M3/M4的权威指南,因为这里有关于RTOS的很好的部分。 Cortex的设计采用了RTOS,并提供了许多有用的功能。

注意:除非您将此作为学习练习,或者只是真的想编写自己的操作系统,否则您最好使用FreeRTOS等经过良好测试的产品,并提供您可能遇到的所有功能使用。

+0

感谢您的回复,我误解了异常发生时的堆叠。我再次阅读这部分,现在一切都很清楚。发生异常时,堆栈位于正在运行的堆栈上,但异常处理发生在MSP堆栈上。顺便说一句,这只是为了学习的目的...... :) – user2782192

+0

是的,它需要一点理解。文件可能会更好。我仍然建议你看看FreeRTOS,它有很多Cortex的可移植层,这是学习如何做事/参考的好方法。 –