你好亲爱的对话人员:
我有一个问题关于wrap_platform_reset(),我的客户说,有时他用手机连接soc,soc会调用wrap_platform_reset()和返回错误代码0xf2f2f2f2
我找到了一些解释:
/ *
WRAP_PLATFORM_RESET的最明显原因发生是由于内存分配故障,这意味着您的SW中存在内存泄漏,您将在某处分配数据,并且您永远不会释放它们(您可以在函数的参数错误中释放它们,应该是reset_mem_alloc_fail)。
*/
我检查了堆赋值:
RAM_BSS_1 0 x00815000
{
* (ke_heap)
}
ScatterAssert (ImageLength (RAM_BSS_1) < 0 x3000)
}
这意味着12k用于堆分配。是足够的吗?
如果有内存泄漏在我的sw,它将重置时,malloc触发和更多的堆空间将不会帮助重置问题?
我怎样才能找到它们,什么时候我需要释放这些记忆?实际上这让我很困惑。有没有什么应用笔记可以帮助我理解柯密乐的机理。
谢谢~
设备:
嗨bigheadbaby,
关于堆分配,您可以在.map文件中找到为内核消息分配了多少堆(搜索heap_db_area、heap_env_area、heap_msg_area)。0x3000堆非常大,我严重怀疑这是否表明您的堆大小。如果在你的sw中有内存泄漏,你继续分配内存,那么在分配内存时,你将在wrap_platfrom_reset中结束。没有特定的方法来找出内存泄漏在哪里。如果您使用的是ke_malloc为了分配房间,你应该从non_ret_heap分配,你应该自由空间使用ke_free()只要你不需要那个房间并确保所有的消息处理程序返回KE_MSG_CONSUMED为了分配空间被释放。
由于MT_dialog
亲爱的MT_DIALOG:
谢谢你的解释。
我似乎找到了一些可能的原因,为什么它会导致重置
我们把一些延迟在while(1)主循环,我猜函数rwip_schedule()不能很好地工作......
例如,如果我想用GPIO来完成一个软件的IIC功能,似乎延迟功能会导致复位……这是否意味着我不能在主回路中放入任何延迟动作?
如果我可以,也许我必须关闭将引起内存搭接的消息,我猜广告可能会周期性地带来一些消息,最终会产生重置。关闭adv行动将有助于这个问题?当IM未连接到SoC时,是否有其他消息可能会导致重置。然后我认为主循环中的延迟可能是可能的。
谢谢~~~
嗨bigheadbaby,
你能让我知道为什么你延迟进入(1)?是否有任何特定的原因为什么添加延迟?请注意,强烈建议不要将任何延迟添加到此功能中。原因是schedule_hille_ble_on()函数调用RWIP_Schedule()函数,该函数用于所有挂起的消息。如果您延迟进入(1),这意味着Schedule_hille_ble_on()也将被延迟,但队列将继续接收邮件,因此调度程序将必须保留其中许多。结果,您将获得Wrap_platform_reset()
谢谢,PM_Dialog
非常感谢〜
最后,请帮助我理解函数rwip_schedule(), ~~~~~帮助~~~~~
根据我们的软件架构,我将尽力避免延迟功能。
我已经完成了测试,我现在确保如果ADV是开启,通过我延迟延迟1,ke_malloc会定期调用但rwip_schedule()只能在延迟完成后运行。
但是我认为rwip_schedule()是一个while循环来寻找回调来处理这些消息,
-------------------------------------------
这是否意味着它将完成一次处理所有的消息,或者它不能,这将最终导致内存积累??
-------------------------------------------
如果rwip_schedule()能及时完成所有的消息和释放内存,是否有什么原因会导致这个错误,我只是想了解更多关于KE的schedule机制,如果可以,请提供一些细节给我。如果有PDF注释可以帮助我理解这一点,也请告知我
再次感谢
嗨bigheadbaby,
DA14580只在BLE核心处于活动状态以及rwip_schedule()函数执行时调度挂起的消息。消息可以异步地发送到堆栈,但在执行rwip_schedule时将同步地提供服务。在主循环的活动部分中,将通过调用rwip_schedule()授予内核控制权,并且只要需要处理消息和事件,它就会保持控制权。对rwip_schedule()的调用发生在schedule_while_ble_on()中,因为内核要求BLE硬件处于活动状态以处理消息。我强烈推荐你看一看7.2.1主循环回调段UM-B-051: DA14580软件平台参考(SDK5)用户手册。您可以从我们的支持门户网站上找到并下载它。关于你的问题,我不太明白你的意思,你能把你的问题说清楚吗?这个错误还存在吗?
谢谢,PM_Dialog
谢谢
但我找不到下载此应用笔记的地方,UM-B-051:DA14580软件平台参考(SDK5)用户手册
我点击您给我的链接,但只显示了这些信息:
--------------------------------------------------------------
版本日期:2016/12/20
版本号:1.2
教程:
收到更新通知
订阅此页面
最左边列中的主复选框打开或关闭给定的订阅。根据网站的设置,你可能有更多的选择积极订阅 .--------------------------------------------------------------
嗨bigheadbaby,
您无法下载它,因为您还没有接受软件许可协议(SLA)然而。请尝试再次下载,并击中将出现从下载的挂锁。在那之后,你将不得不同意许可协议你应该等到你的访问权限。
谢谢,PM_Dialog
我仍然不知道在哪里找到这个sla
是一个邮件访问我可以到达这个链接吗?
嗨bigheadbaby,
请转到产品DA14580并导航到软件和工具。然后尝试下载SDK。在那里,你必须看到挂锁图标 - 点击即可接受协议,您将被授予将在几天内进行SDK访问。
谢谢,PM_Dialog