你好,
我有这个功能的断言platform_reset_func()
:
# ifdef RAM_BUILD
void platform_reset_func(uint32_t错误)
{
reset_reason =错误;
assert_error(0);
}
你在论坛上说这个函数被调用时platform_reset()
由SW调用。但是,我从不打电话这个函数,我在SDK中看到了呼叫者。你能解释一下这个函数的调用方式吗?我没有阅读错误代码,但即使使用错误代码值,我不知道我能做什么,因为我不知道来电......
非常感谢。
GBMEJ.
设备:
嗨gbmej,
τheplatform_reset_func()是从platform_reset()中调用的,是由ROM代码实现的函数。您获得此断言的最可能原因是由于内存不足,或者某些东西触发了680本身上的复位引脚。你能澄清你想要完成的东西,因为你的描述非常通用。为了为您提供正确的指导方针,这将是非常有帮助的。
谢谢,PM_DIALOG.
感谢您的回答。
我有另一个CPU驱动680,可以使用680的复位引脚重置它。但在大多数情况下,函数platform_reset_func()永远不会调用,没有抛出断言。680只重新启动。
680可以在错误(硬故障,freertos错误等堆栈溢出等)上重启。但在这种情况下重新启动之前,我在让680重置之前(调用hw_cpm_reboot_system()或使用看门狗)来记录重启状态(调用hw_cpm_reboot_system(),我从未看到我的日志。
正如你所说,我有一些重启680的东西,但我无法知道......
正如我之前所说的那样,我没有读取错误代码(680被放入黑匣子),但即使我可以阅读它,我不知道哪些错误代码以及我可以播放的地方,以防止这种重新启动。
谢谢,GBMEJ.
嗨gbmej,
重置后,如果您未使用__retained_uninit属性,则不会保留来自日志的数据。此属性将在680重新启动后,将数据保持在未初始化的保留RAM中,并且系统初始化再次启动。您能否在调试模式下运行代码并检查代码崩溃的位置?您是否已启用或禁用看门狗?请尝试使用已启用和禁用的监视器运行您的固件,并告诉我代码卡住的位置。此外,您是否可以澄清SDK的哪个示例以及您使用的是哪种板?您是否开发了一个带有DA14680芯片的定制板或在我们的开发套件中运行固件?如果您有一个定制板,请检查电源线和可能的原因II为什么要获得BOD重置。
谢谢,PM_DIALOG.
你好,
我有一个自定义板,在一个黑匣子里(没有JTAG,没有串行)。我在重新启动之前记录了这个断言。我无法在DEV板上或JTAG的电路板上复制。我唯一能看到的是,这是一个被抛出的声明,我不知道为什么。此外,这个断言非常罕见,因此我很难调查它。
- 看门狗被禁用了。
- SDK 1.0.8.
我会在你说的时候检查电源线。
谢谢你的帮助
GBMEJ.
嗨gbmej,
请使用WatchDog运行您的固件。此外,请检查您的定制董事会的电源线,并通过结果告诉我。
谢谢,PM_DIALOG.
你好,
断言错误代码是
reset_mem_alloc_fail.
。哪个和平的代码可以抛出这个错误?我必须成长哪个堆/堆栈/范围?谢谢,
GBMEJ.
注意:在我的项目中,
Malloc.
连接到Freertos Malloc;我已经启用了FreeRTOS分配错误。我对freertos没有错误(不调用回调),但我有平台重置reset_mem_alloc_fail.
错误代码...嗨gbmej,
你能试着通过改变来增加总堆大小configtotal_heap_size.在自定义custom_config_qspi.h标题文件中的宏。最明显的原因是由于内存分配失败,这意味着您的软件中存在内存泄漏,您可以在某处分配数据,并且您从未释放过它们。
谢谢,PM_DIALOG.