1

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

有没有办法确定是什么函数导致了运行时硬故障?即使是地址也足够了。这可以做到吗?

4

1 回答 1

4

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

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

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

于 2014-05-02T16:07:06.210 回答