找出lpc1788中硬故障的原因

时间:2014-05-02 14:49:20

标签: embedded arm lpc

我一直在开发一个固件,它在lpc1788上移植了一个庞大的GUI库。我使用32 MB SDRAM处理字体和图像,使用NAND闪存存储字体和bmp的二进制文件以及设备配置数据。
我已禁用使用故障,MemManage故障和总线故障。因此,有时当任何GUI功能出现问题时,执行都会进入Hard Fault。现在,我用于GUI的库是emWin,我无法知道导致硬故障的函数是什么。如果NAND闪存损坏并且库试图获取要显示的任何内容,比如背景图像,那么它就会出现硬故障。我可以处理这种情况,因为我肯定(通过带有标志的一些代码实现)知道我的NAND闪存已损坏,我需要将二进制文件重新编程到其中,因为如果我不这样做,每当设备启动后会出现故障 但是,如果其他一些例程导致硬错误,那么我实际上不应该再次重新编程整个闪存。 所以,如果我知道导致硬故障的原因,我将能够相应地修改处理程序,决定是否需要重新编程,或者只是修改一些参数并继续使用最后的已知配置。

有没有办法确定哪个函数导致硬错误,运行时?即使是地址也足够了。可以这样做吗?

1 个答案:

答案 0 :(得分:4)

实现报告堆叠寄存器的硬故障处理程序。 PC寄存器将指示发生异常的执行地址。

可以找到一个示例here,但在示例中使用printf可能是不明智的;你想要一些无缓冲写入UART的东西我建议 - 系统已经坏了 - 使诊断变得更好所需的代码越少。类似的解决方案here只是将值复制到变量,并要求您在调试器中设置断点以检查它们。

要查看报告的PC地址的代码,请查阅编译器的映射和/或列出输出文件,或者直接在调试器的PC寄存器中输入地址。