嗨MT_dialog,
正如您提到的CFG_LOG_HEAP_USAGE, disp_heaplog()函数是工作的,我可以跟踪堆大小,如下所示。
我们使用app_easy_timer()函数来执行任务周期。当它第一次运行app_easy_timer()时,MSG HEAP只有132左右,并且MSG HEAP在任务期间没有增加。然而,当它完成第一个app_easy_timer()并在第二次开始运行app_easy_timer()时,MSG HEAP增加到4244。这是正常的吗?为什么?
***内存记录结果***
>>> env堆
此堆中使用的大小: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,但当tmer完成和定时器(任务)再次开始工作时,MSG堆达到了MAX(4244)大小,为什么?我想我的项目可能有一些错误,我想减少MSG堆,我如何分析和解决?
我使用disp_heaplog()来跟踪每1秒的堆大小,我不确定MAX堆发生在第一个计时器结束时还是在第二个计时器开始时。,就像:
app_easy_timer(任务,10 s);//第一次:>>> MSG HEAP <<<此HEAP中使用的大小:132(current) - 132(maximum)
函数1;>>> MSG HEAP <<<此HEAP中使用的大小:132(current) - 132(maximum)
做功能2;>>> MSG HEAP <<<此HEAP中使用的大小:132(current) - 132(maximum)
......
app_easy_timer(任务,10 s);//第二次>>> MSG HEAP <<<在这个堆中使用的大小:4244(current) - 4244(maximum)------达到最大
函数1;>>> MSG HEAP <<<在此堆中使用的大小:132(当前)- 4244(最大值)
做功能2;>>> MSG HEAP <<<在此堆中使用的大小:132(当前)- 4244(最大值)
......
嗨zhongc,
正如已经提到您正在使用的实用程序的目的是为了让你能找到的最佳大小堆,不追溯的分配发生,关于为什么堆到达之间的大小取决于你的弗兰克-威廉姆斯计时器设置当时间流逝,除了检查和调试你的项目和检查任何可能增加堆大小的分配之外,我没有任何具体的指导方针,以供你检查分配发生在哪里。在我测试过的SDK示例中,在设置内核计时器时,我没有看到这种大小。
由于MT_dialog
嗨MT_dialog,
谢谢,我将调试项目来修复它。
嗨zhongc,
如果以上答案有帮助,请标记为接受。
由于MT_dialog