工具/软件:TI C/C++编译器
尊敬的专家:
我的嵌入式固件目前有一个程序"运行在杂草中"的案例。 我怀疑函数指针或堆栈本身会以某种方式损坏、但它充其量只是一个猜测。
因此、我的目标是首先确定处理器所使用的最后一段实际合法代码、然后再发生错误。
首先、我可以确认我肯定不会获得堆栈溢出。 我通过在 main()的开头写入已知值的栈,然后在崩溃后检查栈来检查它。
崩溃后、PC 始终指向值0x2B12、该值肯定不是有效的程序存储器位置(对于这个 MSP430、应该高于0x8000)。 该位置实际上是堆栈本身中的一个位置。
当程序崩溃时、我在 CCS (v7.4.0)中看不到调试器的调用跟踪。 此时 SP 的值为0x2B26、仍在堆栈边界内。
我已经尝试过 CCS 在调试视图中提供的特殊断点、例如"程序范围内中断"(低于0x8000)、"程序地址前中断"(0x2B12)"写入时的观察点"(特定的堆栈地址)。 然而,这些办法都不起作用。 我不确定硬件是否确实支持此功能、或者我只是使用了错误的功能。
您能否告知我如何分析堆栈以确定最后执行的函数? 可能有如此具体的提示和技巧?
提前感谢!