中断处理程序是否使用被中断的任务的堆栈或单独的堆栈作为其堆栈? (PowerPC,VxWorks)
答案 0 :(得分:8)
这取决于架构。从VxWorks内核程序员指南(v6.8):
所有ISR使用相同的中断堆栈。 [...]
注意:某些体系结构不允许使用单独的中断堆栈,并且 ISR使用中断任务的堆栈。 [...]见 您的BSP的VxWorks参考,以确定您的架构 支持单独的中断堆栈。
在您的情况下,PowerPC支持单独的共享中断堆栈(每个核心)。
答案 1 :(得分:3)
在VxWorks中,有一个特定的中断堆栈。所有中断处理程序共享相同的堆栈,该堆栈位于加载vxWorks映像的位置上方。
我相信默认的堆栈大小是5K,但可以使用内核配置器轻松更改。
ISR机制的工作方式大致如下:
您可以将VxWorks视为通常在ISR代码周围安装汇编代码包装器。
On Entry,它会自动保存通用寄存器(在ISR堆栈上),以便保留执行上下文(另一个ISR或任务)状态。
在退出时,将恢复寄存器,但此外,还会调用OS调度程序以查看刚刚完成的ISR是否更改了更高优先级任务的状态。如果发生这种情况,则恢复优先级较高的任务。如果没有可用的优先级较高的任务,则恢复原始任务。
答案 2 :(得分:0)
xiaokaoy, 有关中断如何在VxWorks程序员指南第2.6节中有效的描述。如果您没有副本,可以从许多来源在线获取。