我一直在开发一个在lpc1788上移植了大量GUI库的固件。我使用32 MB SDRAM处理字体和图像,使用NAND闪存存储字体和bmp的二进制文件以及设备配置数据。
我已经禁用了使用故障,MemManage故障和总线故障。因此,有时当任何GUI功能出错时,执行就会出现严重错误。现在,我所使用的图形用户界面库是emWin,我无法知道是什么函数导致了硬故障。如果NAND闪存被破坏,库试图获取任何要显示的内容,比如背景图像,那么它就会出现严重故障。我可以处理这种情况,因为我可以肯定地知道(通过一些带有标志的代码实现)我的NAND闪存已经损坏,我需要将二进制文件重新编程到其中,因为如果不这样做,每当设备启动时,它就会出现严重故障。
但是,如果其他一些例程导致硬错误,那么我实际上不应该重新编程整个闪存的全部。因此,如果我知道导致硬故障的原因,我将能够相应地修改处理程序,决定是否需要重新编写它,或者只是修改一些参数,然后继续进行最后的已知配置。
有没有办法确定什么功能导致了硬故障,运行时间?即使是地址也足够了。这能办到吗?
发布于 2014-05-02 16:07:06
实现一个报告堆叠寄存器的硬故障处理程序。PC寄存器将指示异常发生的执行地址。
可以找到这里的一个例子,尽管在这个示例中使用printf可能是不明智的;您可能想要一些直接写到UART的东西--系统已经坏了--让诊断出来所需的代码越少越好。类似的解决方案这里只需将值复制到变量,并要求您在调试器中设置断点来检查它们。
要查看报告的PC地址上的代码,可以参考编译器的映射和列表输出文件,或者直接将地址输入调试器中的PC寄存器。
https://stackoverflow.com/questions/23430963
复制相似问题