了解更多常见问题教程

3个帖子/ 0个新帖子
最后发表
zhongc@ilink-wi……
离线
最后看到:3个月1天前
加入:2017-05-09 36
关于dis_heaplog ()

你好,
当我使用J-link调试我的项目时,它总是进入void NMI_HandlerC(unsigned long *hardfault_args)-__asm("BKPT #0\n");我认为这是由于堆大小不足造成的。我检查了文档(Training_08_debugging_v1.0.pdf),并尝试使用disp_heaplog(),如下所示:
***内存记录结果***

>>> env堆
此堆中使用的大小:2044(当前)- 63640(最大)
在其他堆中使用的大小:2044(当前)- 1389(最大)

>>> db堆<<
此堆中使用的大小:2044(当前)- 63640(最大)
在其他堆中使用的大小:2044(当前)- 1389(最大)

>>> MSG heap <<<
此堆中使用的大小:2044(当前)- 63640(最大)
在其他堆中使用的大小:2044(当前)- 1389(最大)

>>>非ret堆<<<
此堆中使用的大小:2044(当前)- 63640(最大)
在其他堆中使用的大小:2044(当前)- 1389(最大)

但是如何分析这个日志呢?堆的大小是多少?谢谢。

关键词:
设备:
MT_dialog
离线
最后看到:1周1天前
工作人员
加入:2015-06-08 34
嗨zhongc,

嗨zhongc,

NMI_Handler发生时,看门狗击中,而不是当你耗尽内存,所以目前为止,我可以告诉你的程序卡在某个点,没有更新看门狗。如果弗兰克-威廉姆斯有一个问题,当试图分配内存,那么弗兰克-威廉姆斯将困在platform_reset_func()(只要你有CFG_PRODUCTION_TEST没有定义,您可以将一个断点,检查如果你转发经过点),如果您已经定义它,那么该装置就应该发出重置。另外,为了使用堆内存日志实用程序,您还必须定义CFG_LOG_HEAP_USAGE,并遵循#define上面注释中的指导方针,因为您所记录的内容表明您没有正确启用日志记录机制。请注意,这种机制并不是完全可操作的,而且在使用此实用程序时,当等待下一个SDK版本修复的堆溢出时,会出现问题。关于日志,在这个堆中使用的大小:current(是当前分配的大小)- maximum(堆达到的最大值),其他堆中使用的大小:块的大小,调度器试图分配在堆,但是失败了,最终在另一堆,当前(堆的大小主要和仍在另一堆分配)——最大的最大大小(调度程序试图分配在堆)。

由于MT_dialog

zhongc@ilink-wi……
离线
最后看到:3个月1天前
加入:2017-05-09 36
嗨MT_dialog,

嗨MT_dialog,
谢谢你有用的回答。我已经解决了这个问题。这个问题不是由堆引起的,它是由没有init的spi flash引起的。