我们有良好的工作代码,包括BASS,PINS和自定义个人资料CUSTS1。
我们最近添加了对苏格达的支持,现在在运行时出现了内存错误。
程序尺寸:CODE = 23964 RO-DATA = 3032 RW-DATA = 1096 ZI-DATA = 8156
我们有点失望,这样一个小型应用程序(我们的客户个人资料很简单)已经耗尽资源限制。
您能否就解决这种情况来提出最佳步骤?
编译器设置为“C99模式”并优化级别3(-O3) - 否则此处有帮助吗?
我们可以安全地手动更改堆/堆栈等吗?如何?
我们可以删除任何调试的东西吗?
贴面是什么?他们似乎占据了一点房间。
我们可以将东西搬进不同的ram地区吗?我们通过SPI将PAN从控制器MCU远程保持在Controller MCU上。我们如何监控这些规模?什么已经在其中?
我相信有很多其他东西......
谢谢,
保罗。
设备:
在我找到的地图文件中看起来有点更深
总rom大小(代码+ RO数据+ RW数据)28092(27.43KB)
所以我认为这应该适合它的32k限制。
我有一个外部处理器,我通过GTL来回发送消息。
在初始化时,存在包含仅超过100字节的键盘的消息。
如果排除outure_dlg_spotar =(1)和spotar,则会正确接收GTL Init消息。
如果complude_dlg_spotar =(0)和spotar包含,则未收到GTL Init消息,并且我们会出现出内存错误。这采用了呼叫的形式
void wrap_platform_reset(UINT32_T错误)
错误= 0xF2F2F2F2有什么想法吗?
谢谢,
保罗。
嗨pvmellor,
关于您的第一个问题,因为您的总rom大小为27.43kb,那么我在将代码下载到580时,我不会看到任何问题,其中您应该能够将代码下载到设备中。您还应该有额外的额外额外代码。0xF2F2F2F2是内存分配失败消息,当设备运行堆时,可以调用它,我没有看到Spotar配置文件与您从外部设备发送的绑定数据之间的任何明确的关系,显然存在一些问题导致此内存泄漏。无论如何,您可以尝试通过在da1458x_config_advanced.h文件中定义msg_heap_sz来增加存储消息的堆,该堆将消息发送到内核.h文件并在默认值覆盖默认值。如果您认为默认的32k散点图文件不足以实现您将拥有的实现,并且您想要放大默认映射,那么有可能应用和放大所生成的图像的提示,可以找到其中一些在这篇文章中https://support.dialog-semicondiondiondum/how-build-program-code-larger-32kb.。OO3上没有额外的优化,如果不使用调试功能,如UART调试的执行,因为您正在使用-O3优化,代码不应参与您的图像。关于符合符合者,你不能只是ommit它们,你必须放置代码并从地址零而不是0x20000000才能避免ROM代码和Sysram之间的长跳,我订购,以便这样做,因此您必须更改SAMPTS文件中的SYSRAM基地址和代替使用0x20000000使用0x0地址,例如在LR_IROM1而不是0x20000000 0x160中,您应该将其更改为LR_IROM 0x0 0x160(这适用于使用0x20000000的所有内存区域作为a基地址),这将为您节省1.5KB。就可以清楚地清楚,上述建议只是提示,如果您决定通过这些建议并尝试他们应该意识到没有测试,因为这是申请所取代的东西,因为您正在扩展以来图像的大小您将能够使用深睡眠。虽然我没有得到最后一个问题,因为您正在从外部MCU启动图像您想要监视的内容?
谢谢mt_dialog.
谢谢你回来,有一些非常有用的信息。
是的,我相信现在是一个堆问题。使用Spotar包括,如果我将第一个GTL消息的大小减少,我将发送到Pan1740到1个字节,则收到消息,如果我将其增加到其100字节,则收到内存错误。斯派宾被排除在外,我没有这个问题。我请注意“UM-B-011图2内存映射”,Spotar修补程序在MSG堆旁边的保留RAM中保持。所以我想知道这是否是问题的来源。似乎严格计算堆大小 - 但它们包括其他用户定义的GTL消息吗?无论如何,我们必须删除Spotar并在我们的客户服务中实现自己的特色,以获得固件更新。
然而,我仍然没有觉得我们完全了解这个问题,并希望跟进你的建议来检查内存泄漏。我想知道你是否可以帮助我了解如何做到这一点?如果没有消耗的消息(意外)有没有办法讲述?我们可以检查或监视堆大小或任何用于处理的消息数,使用字节等吗?
谢谢,
保罗。
嗨pvmellor,
没有标准的方法来追踪内存泄漏的位置,您必须检查代码,还有一个可以帮助您监视堆大小的实用程序,但只在您处于调试模式时,因此#define cfg_log_mem_usage build代码和设备运行,停止执行,然后您可以在keil中打开控制台,然后键入disp_memlog()(+ enten),然后各种堆和相应的大小将Apper将Apper允许到命令窗口。
谢谢mt_dialog.