LPC11xx Cortex-M0 FreeRTOS 硬故障

Posted

技术标签:

【中文标题】LPC11xx Cortex-M0 FreeRTOS 硬故障【英文标题】:LPC11xx Cortex-M0 FreeRTOS Hardfault 【发布时间】:2012-02-13 03:27:39 【问题描述】:

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

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

【问题讨论】:

为什么不使用官方的 FreeRTOS 支持论坛? 这似乎是一个更深入的 ARM 问题,介于 memset()、gcc 和我的 makefile 之间。据我所知,这与 freeRTOS 内核无关。 【参考方案1】:

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

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

【讨论】:

编译器肯定指定了-mthumb,但你说得非常对,我没有抓住那个缺失的位。当我稍后回家时,我会检查一下。感谢您的意见!

以上是关于LPC11xx Cortex-M0 FreeRTOS 硬故障的主要内容,如果未能解决你的问题,请参考以下文章

J-Link仿真Cortex-M架构eCos停留在swi 0的解决办法

LPC5528使用记录

LPC5528使用记录

LPC5528使用记录

求助:谁能发一份用MDK编写的LPC23XX UART0 中断接收的例程

多核:LPC43xx 系列:Cortex M0 时钟