【发布时间】:2014-05-02 14:49:19
【问题描述】:
我一直在开发一个固件,该固件在lpc1788 上移植了一个沉重的 GUI 库。我使用 32 MB SDRAM 处理字体和图像,使用 NAND 闪存存储字体和 bmp 的二进制文件以及设备配置数据。
我已禁用使用故障、MemManage 故障和总线故障。因此,有时当任何 GUI 功能出现问题时,执行会进入硬故障。现在,我用于 GUI 的库是emWin,我无法知道是什么函数导致了硬故障。如果 NAND 闪存损坏并且库尝试获取要显示的任何内容,例如背景图像,那么它就会出现硬故障。我可以处理这种情况,因为我确定(通过一些带有标志的代码实现)我的 NAND 闪存已损坏,我需要将二进制文件重新编程到其中,因为如果我不这样做,无论何时启动设备起来,它会出现硬故障。
但是,如果某些其他例程导致硬故障,那么我实际上不应该再次重新编程整个闪存。
因此,如果我知道导致硬故障的原因,我将能够相应地修改处理程序,以决定是否需要重新编程或简单地修改一些参数并继续最后一次知道的配置。
有没有办法确定是什么函数导致了运行时硬故障?即使是地址也足够了。这个可以吗?
【问题讨论】:
-
请注意,答案对任何 Cortex-M3/4 设备都是通用的 - 如果您没有不必要地具体了解特定芯片,您可能会获得更广泛的受众。事实上,您可能不必问;以谷歌“cortex-m hard fault”为例。在大量无关的华夫饼中,这里有一个简短的简单问题。我认为最后一段是删除其余部分。虽然是不相关的部分之一,emWin 与“重型 GUI 库”相反,但 Qt 是一个重型 GUI 库。
-
通过 SWD 连接的 gdb 能否让它失败?