嗨mt_dialog,
随着关于CFG_LOG_HEAP_USAGE的提及,DISP_HEAPLOG()函数是工作,我可以按照以下操作跟踪堆大小。
我们使用app_easy_timer()函数到exec任务段。首次运行app_easy_timer()时,msg堆仅为132,msg堆在任务期间没有增加。然而,在完成第一个app_easy_timer()时,Msg HeaP不会增加在第二次运行app_easy_timer(),msg堆增加到4244.is正常?为什么?
***内存记录结果***
>>> env heap <<<
此堆中的使用尺寸:188(当前) - 2860(最大)
其他堆中的尺寸:0(电流) - 0(最大)
>>> DB堆<<<
在此堆中使用大小:2328(电流) - 2328(最大值)
其他堆中的尺寸:0(电流) - 0(最大)
>>> msg heap <<<
此堆中使用的尺寸:132(电流) - 4244(最大值)
其他堆中的尺寸:0(电流) - 0(最大)
>>>非Ret堆<<<
此堆中的使用尺寸:0(当前) - 628(最大值)
其他堆中的尺寸:0(电流) - 0(最大)
关键词:
设备:
嗨zhongc,
该工具为您提供了一种方法,顺序跟踪FW上实现的堆的最大尺寸,如果是正常的情况,你的意思是什么?在您的消息中,存储了应用程序向堆栈,配置文件等和背部发送的所有消息,所以所有的通信都反映在该号码中,而不仅仅是您所设置的计时器,也是4244堆在某个点达到的最大值,而不是当前值,当前值为132。
谢谢mt_dialog.
hii mt_dialog,
感谢您的答案。在我的堆日志中,MSG堆最大值为4244,就像提到一样,在某些点达到的最大堆。在我的项目中,在我的项目中,堆是大约126,但何时TEMER完成和计时器(任务)开始工作AGIAN,MSG堆到MAX(4244)大小,为什么?我的项目中可能有问题,我想减少msg堆,我如何分析并解决?
我使用DISP_HEAPLOG()每1s跟踪堆大小,我不确定最大堆在第一个计时器的末尾或在第二个计时器的开始时发生。,正如如下:
app_easy_timer(任务,10s);//第一次:>>> MSG堆<<<使用大小在此堆中:132(当前) - 132(最大值)
职能1;>>> MSG堆<<<使用此堆中的大小:132(当前) - 132(最大)
职能2;>>> MSG堆<<<使用此堆中的大小:132(当前) - 132(最大)
......
app_easy_timer(任务,10s);//第二次>>> msg堆<<<使用大小在此堆中:4244(当前) - 4244(最大值)------到达最大值
职能1;>>> MSG堆<<<使用大小在此堆中:132(当前) - 4244(最大值)
职能2;>>> MSG堆<<<使用大小在此堆中:132(当前) - 4244(最大值)
......
嗨zhongc,
正如已提到您使用的实用程序,以便您能够找到堆的最佳大小而不是从分配发生的最佳尺寸,而是考虑到堆到该大小的原因取决于您的FW所做的内容定时器设置和时间经过时间,我没有任何特定的指导方针来提供,以便检查除了检查和调试项目的分配外,并检查可能增加堆大小的任何可能的分配。在SDK示例上的内核定时器设置中,我没有看到那种大小的尺寸我经历了测试。
谢谢mt_dialog.
嗨mt_dialog,
谢谢,我会调试项目来解决它。
嗨zhongc,
如果上述答案有所帮助,请将其标记为已接受。
谢谢mt_dialog.