你好,
当我使用j-link来调试我的项目时,它始终输入void nmi_handlerc(未签名的long * hardfault_args)-__ asm(“bkpt#0 \ n”);我认为它是由堆大小不足的外壳。我检查doccent(training_08_debugging_v1.0.pdf)并尝试使用disp_heaplog()并显示如下:
***内存记录结果***
>>> env heap <<<
此堆中的使用尺寸:2044(电流) - 63640(最大值)
在其他堆中使用的大小:2044(电流) - 1389(最大值)
>>> DB堆<<<
此堆中的使用尺寸:2044(电流) - 63640(最大值)
在其他堆中使用的大小:2044(电流) - 1389(最大值)
>>> msg heap <<<
此堆中的使用尺寸:2044(电流) - 63640(最大值)
在其他堆中使用的大小:2044(电流) - 1389(最大值)
>>>非Ret堆<<<
此堆中的使用尺寸:2044(电流) - 63640(最大值)
在其他堆中使用的大小:2044(电流) - 1389(最大值)
但是如何分析这个日志?堆的尺寸是什么?谢谢。
关键词:
设备:
嗨zhongc,
当看门狗点击时,不会发生NMI_Handler,而不是在您的内存中运行时,所以据我所知,您的程序在某些时候陷入困境,而不是更新看门狗。如果FW在尝试分配内存时有一个问题,那么FW将卡在platform_reset_func()(只要您没有定义CFG_PRODUCT_TEST时,您可以在那里放置一个断点并检查您的FW是否通过该点进行检查),如果您已定义它,那么设备应该刚刚发出重置。此外,要使用堆内存日志实用程序,您必须定义CFG_LOG_HAP_USAGE并遵循#define上面的注释中的指南,因为您已经记录了什么指示您没有正确启用日志记录机制。请注意,此机制不完全运行,并且当您溢出等待在下一个SDK发布时修复的堆时使用此实用程序存在问题。关于日志,此堆中的使用大小:当前(此刻分配的大小) - 最大值(堆达到的最大值),其他堆中的使用大小:是调度程序尝试的块的大小要在该堆中分配但失败并在另一个堆中最终结束,当前(对于此堆而意图的大小仍然在另一堆中分配) - 最大值(调度程序尝试在该堆中分配的最大大小)。
谢谢mt_dialog.
嗨mt_dialog,
感谢您的有用答案。我已经解决了这个问题。这个问题不是由堆的原因,它由SPI闪存而没有init。