您好,亲爱的dialog员工:
我对wrap\u platform\u reset()有问题,我的客户说有时候他用手机连接Soc,Soc会打wrap\u platform\u reset(),返回错误码0xF2F2F2
我发现一些解释说:
/*
wrap\u platform\u reset发生的最明显原因是内存分配失败,这意味着您的软件中存在内存泄漏,您将数据分配到某个位置,并且从不释放它们(您可以在函数的参数error中验证,该函数应为reset\MEM\u ALLOC\u FAIL)。
*/
我检查了堆分配:
RAM\u BSS\u 1 0x00815000内存
{
*(克尤堆)
}
散点扫描(图像长度(RAM\u BSS\u 1)<0x3000)
}
这意味着12k用于堆分配。够了吗?
如果我的软件中有内存泄漏,它会在触发malloc时重置,而更多的堆空间对重置问题没有帮助?
我怎样才能找到它们,何时需要释放这些记忆?实际上这让我很困惑。有没有什么申请说明可以帮助我了解ke-melloc机制。
谢谢~
设备:
嗨,大头宝贝,
关于堆分配,您可以在.map文件中找到为内核消息分配了多少堆(搜索heap\u db\u区域、heap\u env\u区域、heap\u msg\u区域)。0x3000堆非常大,我严重怀疑这是否表示堆的大小。如果您的软件中存在内存泄漏,并且您一直在分配内存,那么在分配内存时的某个点上是的,您将在wrap\u platfrom\u reset中结束。没有具体的方法来找出内存泄漏的位置。如果您使用ke\u malloc来分配空间,那么应该从non\u ret\u堆进行分配,并且应该在不再需要该空间时使用ke\u free()释放空间,同时确保所有消息处理程序返回ke\u MSG\u consumped以便释放分配的空间。
谢谢你的对话
亲爱的MT\u DIALOG:
谢谢你的解释。
似乎我已经找到了一些可能,为什么它会导致复位
我们在while(1)主循环中设置了一些延迟,我猜rwip\u schedule()函数不能很好地与它一起工作。。。。。。
例如,如果我想用GPIO来填充一个软件IIC函数,似乎延迟函数会导致重置。。。这是否意味着我不能在主循环中执行任何延迟操作?
如果可以的话,也许我必须关掉会导致记忆衰退的味精,我猜广告可能会周期性地带来一些味精,最后会引起重置。关闭adv操作将有助于解决此问题??当im不连接soc时,是否有其他消息可能导致复位。我认为主回路的延迟是可能的。
谢谢~~~
嗨,大头宝贝,
你能告诉我为什么耽搁时间吗?你有什么特别的理由增加延迟吗?请注意,强烈建议不要在此函数中添加任何延迟。原因是schedule\u while \u ble \u on()函数调用rwip \u schedule()函数,该函数为所有挂起的消息提供服务。如果在while(1)中设置延迟,这意味着schedule \u while \u ble \u on()也将延迟,但队列将继续接收消息,因此计划程序必须保留许多消息。因此,您将获得wrap\u platform\u reset()
谢谢,下午好
非常感谢~
最后,请帮助我理解函数rwip\u schedule(),~~~~~帮助~~~~~
根据我们的软件架构,我会尽量避免延迟功能。
我已经做了一个测试,我现在确定如果adv是开的,通过我在while1中放置一个长的延迟,keu malloc被周期性地调用,但是rwip\u schedule()只能在延迟完成后运行。
但是我认为rwip\u schedule()是一个while循环,可以找到回调来处理这些msg,
-------------------------------------------
它是否意味着它将一次处理完所有的消息,或者它不能,这将最终导致内存的积累???
-------------------------------------------
如果rwip\u schedule()可以及时完成所有消息并释放内存,是否有任何原因会导致此错误,我只想了解更多有关KE schedule机制的信息,如果可以,请提供一些详细信息。如果有一些pdf文档可以帮助我理解这一点,请同时通知我
再次感谢
嗨,大头宝贝,
DA14580仅在BLE核心处于活动状态以及rwip\u schedule()函数执行时调度挂起的消息。消息可以异步地发送到堆栈,但是当rwip\u调度被执行时,它们将被同步地服务。在主循环的活动部分,内核将通过调用rwip\u schedule()被授予控制权,并且只要需要处理消息和事件,它就会保持控制权。对rwip\u schedule()的调用发生在schedule\u中,而对ble\u on()的调用则发生在schedule中,因为内核要求ble硬件处于活动状态才能处理消息。我强烈建议您查看第段的7.2.1主循环回调UM-B-051:DA14580软件平台参考(SDK5)用户手册。您可以找到它并从我们的支持门户下载。关于你的问题,我不明白你的确切意思,请你澄清一下你的问题好吗?你还有这个错误吗?
谢谢,下午好
谢谢
但是我找不到从哪里下载这个应用程序说明,UM-B-051:DA14580软件平台参考(SDK5)用户手册
我单击了你给我的链接,但只显示以下信息:
--------------------------------------------------------------
版本日期:20/12/2016
版本号:1.2
教程:
接收更新通知
订阅此页
最左侧列中的主复选框可打开或关闭给定订阅。根据站点的设置,您可能有活动订阅的其他选项--------------------------------------------------------------
嗨,大头宝贝,
您无法下载它,因为您尚未接受软件许可协议(SLA)但是。请尝试再次下载,并点击下载中出现的挂锁。之后你必须同意许可协议你应该等待,直到你的访问将被授予。
谢谢,下午好
我仍然不知道在哪里可以找到这个SLA
是否有邮件访问权限?我可以访问此链接吗?
嗨,大头宝贝,
请转到产品DA14580并导航到软件和工具。然后尝试下载SDK。在那里你会看到一个挂锁图标-点击它,接受协议,你将在几天内被授予SDK访问权限。
谢谢,下午好