2

我一直在使用 NXP LPC11XX 设备和 FreeRTOS 上的项目。问题是这个演示项目使用了一些基于 Eclipse 的 IDE,我不会有任何这些。我将它转换为在 linux 中编译,我可以毫无问题地编程。我看到的问题是当演示项目到达 memset() 时,CPU 中会产生硬故障。这不是我的代码,但我感觉它与我所做的事情有关。我正在使用 codesourcery “gcc version 4.4.1 (Sourcery G++ Lite 2010q1-188)”编译器(我在 Cortex-M3 设备上使用它没有问题)。我看到在该死的“lsls”指令上生成的硬故障在内存中没有任何影响,请参阅 GDB 输出的这个巨大的 pastebin:http: //pastebin.com/3pg0puSe(我不知道对于这样的大块文本有什么常见的做法。)

有什么想法,有人吗?谢谢您的帮助!

4

1 回答 1

5

很难看到,但最后一条指令是blx r3. 看起来 R3 没有设置最后一个位(对于 Thumb 模式),它的值为0x481c. 这将导致 IIRC 导致非法指令异常。在这种情况下,您的调试器会欺骗您,因为加载到 PC 中的值blx可能是无效的。

您可能只是忘记了设置指令模式/CPU 模型(以及要使用的库集)的链接器选项 - 所以它链接到 ARM 模式库。

于 2012-02-13T20:30:12.803 回答