嗨对话框
嗨对话框
我有一个Da1458c作为中央设备使用DSPS主项目和DA14583作为从设备(6)使用DSPS从项目。
我的用例是Central连接到一个slave,接收数据,一旦接收数据,脱离奴隶(app_easy_gap_disconnet (con_id)从user_sps_client_data_rx_ind_handler()函数),然后在user_on_disconnection()我添加了user_scan_start()所以新奴隶开始扫描并连接(一次主连接只有一个奴隶)在奴隶一旦脱离奴隶的主人,Slave将进入延长睡眠模式。
我已经运行了主代码,没有连接到任何奴隶…我没有发现任何问题…
我让所有6个奴隶睡1分钟,我的问题是在一段时间后,比如12- 18个小时的刽子手被绞死…我调试了代码,代码停止在wrap_platform_reset()…
在主方,我已经禁用了长睡眠和深度睡眠……因为这种堆配置将更少..会不会影响??
还有什么问题?
谢谢你!
设备:
嗨prasanth,
如果设备操作和设备达到12 - 18小时后平台复位这意味着代码中的内存泄漏,内存分配,最有可能发生在每个连接或事务及其不释放,所以最终你耗尽内存和wrap_platform_reset()发生。通过增加堆,它不会有太大的帮助,因为即使你增加了它,它最终也会在更长的时间内耗尽。
由于MT_dialog
嗨对话框
谢谢你的回复…
在指针被发送到ke_msg_send()之后,内核将自动释放所分配的内存。如果没有发送消息,则必须使用ke_msg_free()显式释放消息。
在DSPS主代码中只使用了一次ke_msg_free()…我如何使用它来解决我的问题??
In master code In user_sps_host.c => user_on_connection => user_gattc_exc_mtu_cmd() after this code got stopped…
如何解决wrap_platform_reset()问题?
谢谢你!
嗨prasanth,
正如前面提到的,在您的应用程序都应该有某种内存泄漏抗起球后我想每个连接(当wrap_platform_reset()发生RESET_MEM_ALLOC_FAIL确保错误代码),你需要调试这个为了找到它,没有通用的方法,会让你找到它。检查是否有任何消息你已经发送在定制,您已经完成了(因为这不是发生在最初的中央),确保你消费时得到的消息消息处理或如果你分配数据应该被释放。
由于MT_dialog
嗨对话框
我已经测试通过调试错误代码是RESET_MEM_ALLOC_FAIL,评论后所有Arch_printf()内存问题没有发生。
断开连接的问题仍然存在,
我的用例是,Central将连接到一个slave,接收数据,一旦数据接收到,断开从slave的连接(从user_sps_client_data_rx_ind_handler()函数调用app_easy_gap_disconnet(con_id)),之后这个slave将断开连接并进入睡眠
/******************************* 奴隶的代码 ************************************/
Void user_on_disconnect(struct gapc_disconnect_ind const *param)
{
/ / default_app_on_disconnect(参数);
arch_printf(“设备断开连接\ r \ n”);
/ /如果(Console_print) {
// /**************************** UART打印因数 ***************************************/
/ / uart_init (UART_BAUDRATE_115K2 3);
/ / uart_flow_off ();
// uint8_t something2[] = {"user_disconnected\n"};
/ / uart_write ((uint8_t *) something2 sizeof (something2), NULL);
/ / uart_finish_transfers ();
// /***************************************************************************************/
/ /}
app_easy_gap_advertise_stop ();
arch_ble_ext_wakeup_on ();
wrbl_env2。Sensor_read_time_1 = app_easy_timer(6000, wake_up_sm);// 1000 -> 10秒
}
/**********************************************************************************************************/
/********************* 主方 *****************************************************************************/
如果slave disconnect_ind_handler()-> app_on_doiconnection -> user_on_disconnection()将被调用…
但是在长期运行中user_on_disconnect()没有被调用..请帮助
谢谢你的对话框
嗨prasanth,
我将坚持这一点,当注释掉arch_printf()时,内存分配问题不会发生,当使用arch_printf()工具打印太多数据时,实际上是在分配数据,当有机会设备将打印数据时。如果你太频繁地调用arch_printf(),那么你就会分配太多的内存,如果设备没有到达打印点,内存分配就会失败。但就我所能理解的,即使你没有看到这种情况发生,设备仍然断开,但我不能理解你试图描述的确切是什么,所以你能澄清吗?
由于MT_dialog
嗨对话框
谢谢你的回复…
Master向Slave发送断开连接请求,一旦Slave断开连接指示将发送给Master, Master将收到断开连接指示并调用user_on_disconnect()....
主 <--- <------------------------------------> disconnection_req ----------------------------------> 奴隶
>断开连接,停止广告
主 <-- <------------------------------------- disconnectc指示 -------------------------> 断开信号发送给主人
主<——断开了 -----------<-------------
主<——
有时主人没有收到指示,所以user_on_disconnection()被调用,(但我能看到奴隶断开和进入睡眠),,经过一些延迟(6 - 7分钟)user_on_disconnection()被调用,然后运行正常,直到时间调用user_on_disconnect user_on_system_powered()继续运行
在user_on_disconnection()我正在启动user_scan_start(),如果这不是被称为master不会扫描新设备....
谢谢你!
嗨prasanth,
因此,为了得到一个更清晰的pitcure,在有问题的情况下,user_on_disconnect在主端被调用(你得到了断开连接的指示),但不是在从端发送断开连接请求时调用,对吗?如果是这样的话,那么很可能因为某种原因丢失的联系断开之前发布的奴隶,和终止链接超时并监督管理不是因为断开命令发送的奴隶,因为主人“认为”链接仍然是有效的。当问题发生时,检查主端的断开回调,并检查堆栈在发生时返回的原因。
由于MT_dialog