首页 > 解决方案 > 从 svc 触发 pendsv || 手动触发 systick 皮质 m4

问题描述

我目前正在研究手臂皮质 m4。我通过从 SysTick 中断触发 PendSV(进行切换)来实现一个简单的上下文切换。我试图void delay(int ms)通过 SVC 实现一个功能。它应该像这样工作:

  1. 触发 SVC
  2. 延迟函数将延迟写入task_info
  3. 下次任务轮到并跳过任务时,调度程序会减少 task_info 中的延迟。
  4. 当延迟等于 0 时,任务会再次正常调度

问题是,我想在延迟函数将相应的值写入 task_info 之后触发上下文切换。否则延迟只会在下一次上下文切换后生效。我试图从 SVC 中断触发 PendSV。可悲的是,这似乎不起作用。

在我之前实现的延迟函数中,当多个任务同时调用该函数时,我陷入了内存使用错误。

由于当前的想法在时间上更加精确,我希望它能够工作。非常感谢您的帮助。

PS:为了清楚起见,延迟值int ms乘以从时钟速度和 SysTick 频率得出的因子。

标签: c++carmcortex-m

解决方案


推荐阅读