跳过主要内容

平台复位功能

DA14585

8个月前

发布的moguilevski90点 5回复
0的问题

亲爱的团队对话框,

我使用UART在DA14585开发工具包和来自另一个制造商的开发板之间进行通信。在大量数据交换的情况下,通信过程有时会由于调用平台重置函数而中断,并在那里卡住。它是在调试会话中执行代码时发生的。当带有代码的图像在DA14585上闪烁时会发生什么?如何避免代码执行卡住(看门狗在UART通信期间被冻结)?此时SW重置对我也有效,但是,正如我从函数内容中看到的,必须为此定义PRODUCTION_TEST宏,而这里不是这种情况。在不更改SDK代码的情况下,是否有可能进行遍历?

Void platform_reset_func(uint32_t error) {uint16_t tmp;#if (!PRODUCTION_TEST) //触发器断言如果重置原因不是RESET_AFTER_SUOTA_UPDATE ASSERT_WARNING(error == RESET_AFTER_SUOTA_UPDATE);#endif // Trigger SW reset tmp = GetWord16(SYS_CTRL_REG);tmp = (tmp & ~REMAP_ADR0) | 0;//映射ROM地址0 tmp |= SW_RESET;SetWord16 (SYS_CTRL_REG tmp);}

接受答案!

8个月前

PM_Dialog

嗨moguilevski。

谢谢你的在线问题。这意味着平台将重置。Τhe platform_reset_func()由platform_reset()调用,它在ROM代码中实现。产生此断言的最可能的原因是内存不足,因为您分配的消息永远不会被使用。例如,如果您正在分配通知消息,并且您有一个小的连接间隔,那么消息将被堆起来直到连接事件到达,但是如果连接间隔较大,则在连接事件到达之前就会耗尽内存。您可以增加连接间隔。在您的应用程序中,在每个连接之后可能会出现某种内存泄漏堆积,因为错误代码是RESET_MEM_ALLOC_FAIL。为此,请检查是否有任何挂起消息,并确保您正在使用在处理消息时获得的消息,或者您正在分配应该释放它们的数据。

谢谢,PM_Dialog

接受答案!

8个月前

moguilevski 90点

非常感谢您的详细回答。

7个月前

yykx 75点

我也遇到了一些困难。我引用示例代码“da14531-da14585-586_reading_i2c_accelerometer_ble”。然后运行platform_reset_func()。

void user_svc1_accel_X_send_ntf():

使用代码应用内存:

struct custs1_val_ntf_ind_req* req = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ, prf_get_task_from_id(TASK_ID_CUSTS1), TASK_APP, custs1_val_ntf_ind_req, string_length);

我们运行的连接间隔很小,如果如你所说,内存不足,如何释放内存?

7个月前

PM_Dialog

嗨yykx,

谢谢你的评论。如果您可以创建一个新的论坛线程与您的问题。

您提到您正在使用da14531-da14585-586_reading_i2c_accelerometer_ble SW示例。

您是否对示例进行了任何修改,或者按照提供的方式使用它?

请分享你所做的修改。

连接间隔和堆大小是多少?一种可能的解决方案是增加连接间隔或增加堆大小。

谢谢,PM_Dialog

1个月前

jackphan 80点