我正在尝试在MSP430上的项目中找到堆栈溢出,并发现它主要发生在堆栈非常满后发生IRQ时。
我在堆栈指针写入时设置了一个断点,其值小于堆栈的起始地址,并且CPU在IRQ处理程序中停止。
IAR C-SPY中的调用堆栈显示然后终止于处理函数,但是我对这下面的内容感兴趣,因为这是填充堆栈的内容。
有没有办法在当前中断处理程序下面显示调用堆栈?
答案 0 :(得分:0)
如果中断处理程序是用C语言编写的,这应该可以正常工作,因为即使对于中断函数,生成的CFI(调用帧信息)也应该是正确的。
但是,如果这(由于某种原因)不起作用,或者中断例程是用汇编语言编写的(没有适当的CFI指令),你可以使用一点技巧。您可以通过从堆栈中检索PC并通过“备份”SP在功能内调整的量来手动修改寄存器窗口中的PC和SP寄存器。此后,调试器将显示中断发生时正在执行的功能。
注意,在传统的MSP430内核中,PC存储为普通的16位值。但是,在MSP430X内核中,20位与状态寄存器有点交织在一起,有关详细信息,请参阅架构手册。