使用 IAR 在 MSP430 上的 IRQ 处理程序下方显示调用堆栈

发布于 2024-10-20 17:20:08 字数 211 浏览 1 评论 0原文

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

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

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

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

I'm trying to find a stack overflow in a project on MSP430, and found that it occurs mainly when an IRQ occurs after the stack is pretty full.

I've set a breakpoint on a stack pointer write with a value that is smaller than the start address of the stack, and the CPU halts in the IRQ handler.

The call stack display in IAR C-SPY then terminates at the handler function, however I'd be interested in what is below this, as this is what filled the stack.

Is there a way to display the call stack below the current interrupt handler?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

燕归巢 2024-10-27 17:20:08

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

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

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

If the interrupt handler is written in C, this should work correctly, as the generated CFI (call frame information) should be correct even for interrupt functions.

However, if this (for some reason) should not work, or if the interrupt routine is written in assembler (without proper CFI directives), you can use a little trick. You can manually modify the PC and SP registers in the register window by retrieving the PC from the stack and by "backing up" the SP the amount that it was adjusted inside the function. After this, the debugger will display the function that was executing when the interrupt occurred.

Note, in the traditional MSP430 core, the PC is stored as a plain 16 bit value. However, in the MSP430X core the 20 bits are a bit intertwined with the status register, see the architecture manual for details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文