Embedded 查找lpc1788中硬故障的原因

Embedded 查找lpc1788中硬故障的原因,embedded,arm,lpc,Embedded,Arm,Lpc,我一直在开发一个固件,上面移植了大量GUI库。我使用32 MB SDRAM处理字体和图像,使用NAND闪存存储字体和bmp的二进制文件以及设备配置数据。 我已禁用使用故障、内存管理故障和总线故障。因此,有时当任何GUI功能出现问题时,执行都会出现硬故障。现在,我用于GUI的库是,我无法知道是什么函数导致了硬故障。如果NAND闪存损坏,并且库试图获取任何要显示的内容(例如背景图像),那么它就会出现硬故障。我可以处理这种情况,因为我确信(通过一些带有标志的代码实现)我的NAND闪存已损坏,我需要将二

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


有没有办法确定是什么功能导致了硬故障、运行时故障?连地址都够了。可以这样做吗?

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

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


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

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

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


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

请注意,答案对于任何Cortex-M3/4设备都是通用的-如果您对特定芯片没有不必要的特殊性,您可能会获得更广泛的受众。事实上,你可能不需要问;例如,Googl的“cortex-m硬故障”。在大量无关的华夫饼干中,有一个简短的问题。我认为最后一段是删除其余部分。虽然emWin是一个不相关的部分,但它与“重GUI库”相反,Qt是一个重GUI库。通过SWD连接gdb,你能让它失败吗?请注意,答案对于任何Cortex-M3/4设备都是通用的-如果你对特定芯片没有不必要的特殊性,你可能会获得更广泛的受众。事实上,你可能不需要问;例如,Googl的“cortex-m硬故障”。在大量无关的华夫饼干中,有一个简短的问题。我认为最后一段是删除其余部分。虽然emWin是一个不相关的部分,但它与“重GUI库”相反,Qt是一个重GUI库。如果gdb通过SWD连接,你能让它失败吗?