为什么不能使用内核服务从NMI处理程序内发出任务信号?

时间:2018-06-19 10:26:52

标签: embedded rtos

在阅读uCOS-II文档时,我读到人们不能使用内核提供的机制来通知NMI内部的任务,我不清楚为什么。

谢谢。

编辑:

来源:uc / OS-II实时内核用户手册,第2章:实时系统概念,第86页:

  

当您为NMI提供服务时,您无法使用内核服务   发出任务信号,因为无法禁用NMI来访问关键任务   代码段。但是,您仍然可以传递参数   NMI。

1 个答案:

答案 0 :(得分:1)

MicroC / OS-II《实时内核》第二版。解释了原因(尽管相当简短):

  

2.31不可屏蔽的中断

     

[...] 在为NMI服务时,由于无法禁用NMI来访问代码的关键部分,因此无法使用内核服务来发信号通知任务。 [...]

这可能不是问题的原因可能并不明显,但是如果线程进入关键部分并且发生NMI,则调用发出信号的内核服务将导致调度程序被调用并导致内部上下文切换中断的关键部分。