你好,
当我使用J-link调试我的项目时,它总是输入void NMI_HandlerC(unsigned long *hardfault_args)-__asm("BKPT #0\n");。我认为这是由于堆大小不足造成的。我检查文档(Training_08_debugging_v1.0.pdf),并尝试使用disp_heplog(),显示如下:
***内存日志结果
>>>环境堆<<
HEAP中使用的大小:2044(当前)- 63640(最大)
在其他heap中使用的大小:2044(当前)- 1389(最大)
>>> db heap <<
HEAP中使用的大小:2044(当前)- 63640(最大)
在其他heap中使用的大小:2044(当前)- 1389(最大)
>>> MSG heap <<<
HEAP中使用的大小:2044(当前)- 63640(最大)
在其他heap中使用的大小:2044(当前)- 1389(最大)
Non-Ret HEAP <<<
HEAP中使用的大小:2044(当前)- 63640(最大)
在其他heap中使用的大小:2044(当前)- 1389(最大)
但是如何分析这个日志呢?and what is size is of for heap?
关键词:
设备:


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