发送数据时重置

5个帖子/ 0新
最后一篇
迈克尔克
离线
最后一次露面:5年3个月前
加入:2015-05-12 16:12
发送数据时重置

我们有一个基于概述的申请报告示例。该应用程序应该通过UART从外部MCU接收数据,并将其发送到空中。
更详细信息,proxr_uart_message_handler汇集了消息,并通过以下方式发送它的第一个片段(整个消息是大约100个字节)

attmdb_att_set_value(proxr_env.tx_shdl + tx_idx_tx_tx_val,fragment_size,fragment_data);
prf_server_send_event((prf_env_struct *)和proxr_env,true,proxr_env.tx_shdl + tx_idx_tx_tx_val);

然后,当发送片段时,从GattC_CMP_EVT_Handler上下文中,我们以与上述相同的方式发送下一个片段。
它似乎有效,但有时申请被崩溃了。
我有两个问题:

1.如上所述,是否可以发送数据?例如。从gattc_cmp_evt_handler和proxr_uart_message_handler上下文中调用prf_server_send_event是安全的吗?

你能给一些暗示如何追捕崩溃的原因吗?我只是获得一堆jlink错误
** jlink警告:CPU无法停止
*** JLINK错误:CPU运行时无法读取寄存器15(R15)
*** jlink错误:CPU正在运行时无法读取寄存器16(XPSR)
** jlink警告:CPU无法停止
所有寄存器都显示零(显然,因为JLINK LOOSE连接)。我在hardfault_handlerc中设置了断点,但没有命中。此外,在重新连接时,我检查了status_base内存位置,但它只有zeros。

谢谢,
迈克尔

设备:
mt_dialog.
离线
最后一次露面:1个月1周前
职员
加入:2015-06-08 11:34
迈克尔,

迈克尔,

抱歉延迟,我们正在努力,当我们有新的东西时,我们会回到你身边。

谢谢mt_dialog。

Joacimwe.
离线
最后一次露面:1年4个月前
格鲁鲁
加入:2014-01-14 06:45
如果你收到,你会怎么做

如果您尚未发送上一个数据包的最后一个片段,您会在UART上收到另一个数据,您会这样做?请注意,PRF_SERVER_SEND_EVENT发送消息,当您收到GATTC_CMP_EVT时,邮件完成,如果您发送的消息比可以消耗,则堆内存将耗尽,然后芯片重新启动而不触发硬故障处理程序。如果您将数据变得更快,则可能需要对UART或删除数据包进行一些流量控制,而不是在空中发送的速度。

mt_dialog.
离线
最后一次露面:1个月1周前
职员
加入:2015-06-08 11:34
嗨joacime,

嗨joacime,

你可能是对的,你遇到问题的原因是你在某些时候你用完了内存。请在jump_table中的platform_reset函数中覆盖platform_reset函数,然后调试它,看看设备是否发出平台重置(这可能会导致您对jlink的麻烦)。大多数人可能会比你可以释放的速度分配内存,因此你用完了。是的,对于流量控制机制可以解决您的问题。

谢谢mt_dialog.

迈克尔克
离线
最后一次露面:5年3个月前
加入:2015-05-12 16:12
joacimwe,mt_dialog,

joacimwe,mt_dialog,

确实是由内存分配引起的问题,使用rest_mem_alloc_fail错误代码从res_msg_alloc调用platform_reset。
谢谢你的帮助。

主题锁定