0

中断处理程序是使用被中断任务的堆栈还是单独的堆栈作为其堆栈?(PowerPC、VxWorks)

4

3 回答 3

8

这取决于架构。从 VxWorks 内核程序员指南(v6.8):

所有 ISR 都使用相同的中断堆栈。[...]

注意:某些架构不允许使用单独的中断堆栈,而 ISR 使用被中断任务的堆栈。[...] 请参阅您的 BSP 的 VxWorks 参考以确定您的架构是否支持单独的中断堆栈。

在您的情况下,PowerPC 确实支持单独的共享中断堆栈(每个内核)。

于 2012-12-13T09:02:54.720 回答
3

在 VxWorks 中,有一个特定的中断堆栈。所有中断处理程序共享同一个堆栈,该堆栈位于加载 vxWorks 映像的正上方。

我相信默认堆栈大小是 5K,但可以通过内核配置器轻松更改。

ISR 机制大致是这样工作的:
您可以认为 VxWorks 通常会在您的 ISR 代码周围安装一个汇编代码包装器。

在进入时,它会自动保存通用寄存器(在 ISR 堆栈上),以便保留执行上下文(另一个 ISR 或任务)状态。

在退出时,寄存器被恢复,但另外,调用 OS 调度程序来查看刚刚完成的 ISR 是否改变了更高优先级任务的状态。如果发生这种情况,则更高优先级的任务将继续。如果没有更高优先级的任务可用,则恢复原始任务。

于 2012-11-07T13:24:16.853 回答
0

xiaokaoy,在 VxWorks 程序员指南第 2.6 节中有一个很好的关于中断如何工作的描述。如果您没有副本,可以从许多来源在线获得。

于 2012-11-20T21:47:34.373 回答