【问题标题】:Arm cortex-m4 custom os desginArm cortex-m4 定制操作系统设计
【发布时间】:2016-07-05 15:06:37
【问题描述】:

我正在为ARM Cortex-M4内核写一个小操作系统,有一些疑问。我决定通过主管调用(SVC)来放置操作系统功能,我在其中保存和维护所有内核对象和内核函数。

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

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

【问题讨论】:

  • 您要解决的问题是什么?

标签: arm kernel rtos cortex-m


【解决方案1】:

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

注意:除非您将此作为学习练习,或者只是真的想编写自己的操作系统,否则您最好使用 FreeRTOS 之类的东西,它经过了很好的测试并提供了您可能会使用的所有功能.

【讨论】:

  • 感谢您的回复,我误解了发生异常时的堆叠。我又读了一遍那部分,现在一切都清楚了。当异常发生时,堆栈在运行堆栈上,但异常处理发生在 MSP 堆栈上。顺便说一句,这只是为了学习目的...... :)
  • 是的,确实需要一点理解。文档可能会更好。我仍然建议您看看 FreeRTOS,它有许多适用于 Cortex 的可移植层,这是学习如何做事/参考的绝佳方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2019-06-27
  • 2018-09-29
  • 2017-12-03
  • 2023-04-07
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多