嗨对话框
嗨对话框
我有一个Da1458c作为中心设备使用DSPS主项目和DA14583作为从(6)使用DSPS从项目。
我的用例是,Central将连接到一个从站,接收数据,一旦接收到数据,脱离奴隶(app_easy_gap_disconnet (con_id)从user_sps_client_data_rx_ind_handler()函数),然后在user_on_disconnection()我添加了user_scan_start()所以新奴隶开始扫描并连接(一次主连接只有一个奴隶)在奴隶一旦脱离奴隶的主人,奴隶将进入延长睡眠模式。
我已经运行了主代码,没有连接到任何从属…我发现没有问题…
我把所有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()被使用…我该如何用它来解决我的问题?
在主代码中user_sps_host.c => user_on_connection => user_gattc_exc_mtu_cmd()后,此代码被停止…
我如何解决这个wrap_platform_reset()问题??
谢谢你!
嗨prasanth,
正如前面提到的,在您的应用程序都应该有某种内存泄漏抗起球后我想每个连接(当wrap_platform_reset()发生RESET_MEM_ALLOC_FAIL确保错误代码),你需要调试这个为了找到它,没有通用的方法,会让你找到它。检查是否有任何消息你已经发送在定制,您已经完成了(因为这不是发生在最初的中央),确保你消费时得到的消息消息处理或如果你分配数据应该被释放。
由于MT_dialog
嗨对话框
我已经通过调试测试的错误代码是RESET_MEM_ALLOC_FAIL,注释后所有Arch_printf()内存问题没有发生。
仍然存在断开连接的问题,
我的用例是,Central将连接到一个从站,接收数据,一旦接收到数据,从站断开连接(从user_sps_client_data_rx_ind_handler()函数调用app_easy_gap_disconnet(con_id)),然后这个从站断开连接并进入睡眠
/******************************* 奴隶的代码 ************************************/
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 -> 10s
}
/**********************************************************************************************************/
/********************* 主方 *****************************************************************************/
如果从端断开连接,那么在主端gapc_disconnect_ind_handler()-> app_on_doiconnection -> user_on_disconnection()将被调用…
但是在长期运行中user_on_disconnect()没有被调用..可能是什么问题??请帮助
谢谢你的对话框
嗨prasanth,
我将坚持一点,当注释掉arch_printf()内存分配问题不会发生,当使用arch_printf()实用程序打印太多数据时,你实际上分配数据,当有机会设备将打印。如果你经常调用arch_printf(),那么你分配了太多的内存,如果设备没有到达打印点,内存分配将失败。但据我所知,即使你没有看到这发生设备仍然断开,但我不能理解到底是什么,你试图描述,所以你能澄清吗?
由于MT_dialog
嗨对话框
感谢您的回复…
主服务器向从服务器发送断开请求,一旦从服务器断开指示将发送给主服务器,主服务器将收到断开指示并调用user_on_disconnect()....
主 <--- <------------------------------------> disconnection_req ----------------------------------> 奴隶
->断开连接,停止广告->进入睡眠状态
主 <-- <------------------------------------- disconnectc指示 -------------------------> 断开信号发送给主人
主<——断开了 -----------<-------------
主<——
有时主人没有收到指示,所以user_on_disconnection()被调用,(但我能看到奴隶断开和进入睡眠),,经过一些延迟(6 - 7分钟)user_on_disconnection()被调用,然后运行正常,直到时间调用user_on_disconnect user_on_system_powered()继续运行
在user_on_disconnect()中,我正在启动user_scan_start(),如果这不是称为master将不会扫描新设备....
谢谢你!
嗨prasanth,
因此,为了得到更清楚的图片,在有问题的情况下,user_on_disconnect在主端被调用(您得到断开指示),但不是在从端发送断开请求时,对吗?如果是这样的话,那么很可能因为某种原因丢失的联系断开之前发布的奴隶,和终止链接超时并监督管理不是因为断开命令发送的奴隶,因为主人“认为”链接仍然是有效的。当问题发生时,检查master侧的断开连接回调,并检查当问题发生时堆栈返回的原因是什么。
由于MT_dialog