【发布时间】:2013-09-14 22:02:10
【问题描述】:
我正在开发一个简单的 MSP430 应用程序,它通过无线电与类似的其他设备进行通信,并将数据记录到闪存中。我正在使用收音机唤醒来节省电量。我正在使用 mspgcc 和 mspdebug 进行 C 编程。
我的问题如下: 我的计时器在一段时间后停止工作,但设备继续接收数据。即接收中断继续工作,但定时器停止,主循环依赖定时器。
我了解我的堆栈可能已损坏。就像设备卡住和打印当前寄存器值一样,它们总是相同的:
pc/r0: 8092 sp/r1: 053e sr/r2: 0059 r3: 0000
fp/r4: ffff r5: 5a08 r6: ffff r7: ffff
r8: ffff r9: ffff r10: ffff r11: 0000
r12: 0009 r13: 000c r14: 0009 r15: 0001
一个简单的回溯显示堆栈上没有任何内容.. 只是 main() 我总是为 SP 和 SR 获得相同的值。我有当前的堆栈,但是我对汇编知之甚少,有什么方法可以让我理解发生了什么,而不是学习汇编并手动回溯所有内容。 如果需要更多信息,请告诉我。我真的很抱歉提出这样的问题,但是谷歌几乎没有帮助。如果我有整个内存转储,有什么方法可以回溯(不是手动)?
【问题讨论】:
-
如果您正在使用像 MSP430 这样的嵌入式设备,学习组装可能是个好主意。
-
你最近在 mspgcc 邮件列表上问过这个吗?一周前有一封电子邮件,其中包含从未回复的建议。他们是如何成功的?
-
感谢您的回复。在 mspgcc 邮件列表上提出一些建议后,我已经取得了一些进展,因为现在我被困在我知道发生了什么的地方,更多的是关于堆栈中 053e 位置的问题。所以我没有在那里问。整个内存转储看起来令人生畏。然后我将开始学习汇编,我已经卡在这一点上好几个星期了。
-
我不知道您使用的是哪个 msp430,但我的地址 0x053e 用于外围设备(0x0100 到 0x0fef)。请在用户指南中查看您设备的内存映射。