0

我试图在 MSP430 上的一个项目中查找堆栈溢出,发现它主要发生在堆栈已满后发生 IRQ 时。

我在堆栈指针写入上设置了一个断点,其值小于堆栈的起始地址,并且 CPU 在 IRQ 处理程序中停止。

IAR C-SPY 中的调用堆栈显示然后在处理函数处终止,但是我会对下面的内容感兴趣,因为这是填充堆栈的内容。

有没有办法在当前中断处理程序下方显示调用堆栈?

4

1 回答 1

0

如果中断处理程序是用 C 编写的,这应该可以正常工作,因为即使对于中断函数,生成的 CFI(调用帧信息)也应该是正确的。

但是,如果这(由于某种原因)不起作用,或者如果中断例程是用汇编程序编写的(没有适当的 CFI 指令),您可以使用一个小技巧。您可以在寄存器窗口中手动修改 PC 和 SP 寄存器,方法是从堆栈中检索 PC 并通过“备份”SP 在函数内调整的数量。此后,调试器将显示中断发生时正在执行的函数。

请注意,在传统的 MSP430 内核中,PC 存储为普通的 16 位值。但是,在 MSP430X 内核中,这 20 位与状态寄存器有点交织在一起,有关详细信息,请参阅架构手册。

于 2011-03-11T09:10:39.413 回答