跳过主要内容

platform_reset_func调用者

DA1468x

2年前

发布的gbmej0点 7回复
0的问题

你好,
我在函数中得到了assertplatform_reset_func ()

# ifdef RAM_BUILD
空白platform_reset_func (uint32_t错误)

reset_reason =错误;
ASSERT_ERROR (0);


你在论坛上说这个函数被调用时的函数platform_reset ()是由SW调用的。然而,我从来没有调用这个函数,我在SDK中没有看到调用者。你能给我解释一下这个函数是如何调用的吗?我没有读错误代码,但即使有错误代码的值,我不知道我能做什么,因为我不知道调用者…

非常感谢。
gbmej

2年前

PM_Dialog

嗨gbmej,

Τhe platform_reset_func()是从platform_reset()调用的,它是一个由ROM代码实现的函数。产生这个断言的最可能的原因是内存不足,或者有什么东西触发了680本身的复位引脚。你的描述太笼统了,能否请你说明一下你想要达到的目标。为了给你提供正确的指导方针,这将是非常有帮助的。

谢谢,PM_Dialog

2年前

gbmej 0点

谢谢你的回答。

我有另一个CPU,它驱动680,可以用680的复位引脚复位。但是在大多数情况下,函数platform_reset_func()不会被调用,也不会抛出assert。680刚刚重启。
680也可以在错误(硬故障,freertos错误,如堆栈溢出等)时重新启动自身。但是在这种情况下,在重新启动之前,我记录了重新启动状态,然后让680重新设置自己(调用hw_cpm_reboot_system()或使用watchdog),我从来没有看到我的日志。
就像你说的,我有重启680的东西,但我不知道是什么…
就像我之前说的,我还没有读到错误代码(680被放在一个黑盒子里),但即使我能读到它,我也不知道哪些是可用的错误代码,我可以在哪里玩,以防止重新启动。

谢谢,gbmej

2年前

PM_Dialog

嗨gbmej,

重置后,如果没有使用__RETAINED_UNINIT属性,日志中的数据将不会被保留。该属性将在680重新启动和系统初始化再次开始后将您的数据保存在保留RAM中,而不进行初始化。你能在调试模式下运行你的代码并检查代码崩溃的地方吗?你启用或禁用看门狗了吗?请尝试运行您的固件与启用和禁用看门狗,并让我知道你的代码卡在哪里。另外,你能说明一下SDK的哪个例子和你使用的是哪个板吗?您是否已经开发了带有DA14680芯片的定制板或在我们的开发套件中运行您的固件?如果你有一个自定义板,请检查电源线和一个可能的原因ii为什么你得到一个BOD复位。

谢谢,PM_Dialog

2年前

gbmej 0点

你好,

我有一个定制板,在一个黑盒子(没有jtag,没有串行)。我已经在重新启动之前记录了这个断言。我不能在开发板上或在带有jtag的板上复制。我唯一能看到的是这个断言已经被抛出,我不知道为什么。此外,这是非常罕见的断言,所以它是非常困难的,我调查它。
—关闭看门狗。
- - - - - - SDK 1.0.8
我会按你说的检查电源线。
谢谢你的帮助

gbmej

2年前

PM_Dialog

嗨gbmej,

请启用看门狗运行您的固件。另外,请检查你们定制板的电源线,并让我知道结果。

谢谢,PM_Dialog

2年前

gbmej 0点

你好,
断言错误代码为RESET_MEM_ALLOC_FAIL.哪个代码可以抛出这个错误?我必须增加哪个堆/堆栈/范围?
谢谢,
gbmej

注:在我的项目中,malloc连接到FreeRTOS malloc;我已经启用了FreeRTOS分配错误。我在FreeRTOS上没有错误(回调未被调用),但我有平台重置RESET_MEM_ALLOC_FAIL错误代码…

2年前

PM_Dialog

嗨gbmej,

你能试着增加总的堆大小,通过改变configTOTAL_HEAP_SIZE宏自定义custom_config_qspi.h头文件。最明显的原因是由于内存分配失败,这意味着在您的软件中存在内存泄漏,您将数据分配到某个地方,但您从未释放它们。

谢谢,PM_Dialog