发送数据时重置

5个员额/0个新员额
最后一篇文章
迈克尔
离线
最后一次见到:5年9个月前
加入:2015-05-12 16:12
发送数据时重置

我们有一个基于邻近报告示例的应用程序。应用程序应该通过UART从外部MCU接收数据并将其发送到空中。
更详细地说,proxr_uart_message_处理程序将消息组装起来,并通过

attmdb_att_set_值(proxr_env.tx_shdl+tx_IDX_tx_tx_VAL、碎片大小、碎片数据);
prf_服务器发送事件((prf_env_struct*)和proxr_env,true,proxr_env.tx_shdl+tx_IDX_tx_VAL);

然后,当片段被发送时,我们从gattc_cmp_evt_处理程序上下文以与上面相同的方式发送下一个片段。
它似乎可以工作,但有时应用程序会崩溃。
我有两个问题:

1.如上所述发送数据可以吗?例如,从gattc\u cmp\u evt\u处理程序和proxr\u uart\u消息处理程序上下文调用prf\u服务器\u发送\u事件是否安全?

2.你能给我一些关于如何找出撞车原因的提示吗?我只是得到了一堆Jlink错误,比如
**JLink警告:无法停止CPU
***JLink错误:在CPU运行时无法读取寄存器15(R15)
***JLink错误:在CPU运行时无法读取寄存器16(XPSR)
**JLink警告:无法停止CPU
所有寄存器都显示为零(很明显,因为Jlink断开了连接)。我在HardFault_HandlerC中设置了断点,但未命中。另外,当重新连接时,我检查了状态_基本内存位置,但它只有零。

谢谢
迈克尔

设备:
MT_对话框
离线
最后一次见到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨,迈克尔,

嗨,迈克尔,

很抱歉耽搁了,我们正在处理,我们有新的消息后会回复你。

谢谢你的对话。

乔西姆韦
离线
最后一次见到:1年10个月前
大师
加入:2014-01-14 06:45
如果你收到了,你会怎么做

如果您还没有发送上一个数据包的最后一个片段,那么通过uart接收到另一个数据量,您会怎么做?请注意,prf_server_send_事件会发送一条消息,当您收到GATTC_CMP_EVT时,该消息将完成,如果您发送的消息超过您的消耗量,堆内存将耗尽,然后芯片将重新启动,而不会触发硬故障处理程序。您可能需要对uart进行一些流量控制,或者,如果您获取数据的速度比通过空中传输的速度快,则可能需要丢弃数据包。

MT_对话框
离线
最后一次见到:6个月2周前
工作人员
加入:2015-06-08 11:34
嗨,乔西姆,

嗨,乔西姆,

也许你是对的,问题的原因是你在某个时候内存不足。请跳过跳转表中的平台重置功能,并对其进行调试,以查看设备是否发出平台重置(这可能会导致您在使用Jlink时遇到的问题)。最可能的情况是,分配内存的速度比释放内存的速度快,因此内存不足。是的,流量控制机制可以解决你的问题。

谢谢你的对话

迈克尔
离线
最后一次见到:5年9个月前
加入:2015-05-12 16:12
朱西姆韦,对话山,

朱西姆韦,对话山,

这个问题确实是由内存分配引起的,平台重置是用来自ke_msg_ALLOC的reset_MEM_ALLOC_FAIL错误代码调用的。
谢谢你的帮助。

主题锁定