我试图追问一个问题、我认为这是由 ISR 内的堆栈损坏引起的- ISR 永远不会像预期的那样返回到非 ISR 模式。
为了尝试并达到其底部、我一直在尝试了解 在 ISR 入口生成的调用帧、但我仍在努力。 根据我可以了解的内容、调用帧由触发 ISR 时的 PC 和 SR 组成、编译器决定存储在栈上的任何 ISR 局部变量以及需要在 RETI 上恢复的一组寄存器的值、 但实际范围完全取决于编译器确定的需求。 除了反汇编代码之外、是否还有其他方法可以查看调用帧的范围、以及到底会推入什么内容? 我找到了 slaa140、它在概念上概括了如何构建呼叫帧-在任何地方还有什么其他可用的东西吗?
Code Composer 能够生成调用层次结构、而无需(大概)访问底层堆栈操作。 这使我认为呼叫帧中存在一些我缺失的元数据(可能是某种帧指针?)。 CCS 是如何通过堆栈生成调用层次结构的?
该代码全部由 GCC 生成。 感谢您的任何见解或指导。
Andrew