每次外设发出消息“GAPC_DISCONNECT_CMD”时,我的应用程序都断开了来自中央的连接,而且由于看门狗超时而崩溃。
断开消息在10(使用计时器)不活动之后发出(无数据发送,往返客户端)。如果我禁用WDT,则应用程序也不正确行为。
看门狗设置为ff。
有什么我可能遗漏的,在断开连接之前我应该怎么做?
一个问题,当一个问题“Gapc_disconnect_cmd”时,“task_app”状态会设置为非连接状态,如“app_disabled”或“app_connectable”?
如果没有,它如何以及何时可以再次设置?在发出“GAPC_DISCONNECT_CMD”时,我应该更改“TASK_APP”状态?
**********************************************************************************************************
静态int glps_req_cmp_evt_handler(ke_msg_id_t const msgid,
struct glps_req_cmp_evt const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
user_inact_timer = app_easy_timer(meas_inact_update,user_inact_timer_cb);
}
*********************************************************************************************************
静态int glps_racp_req_ind_handler(ke_msg_id_t const msgid,
struct glps_racp_req_ind const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
app_easy_timer_cancel(user_inact_timer);
}
*********************************************************************************************************
静态void user_inact_timer_cb()
{
uint8_t state = ke_state_get(task_app);
//检查我们是否处于连接状态
if((state == app_security)||(state == app_connected)||(state == app_param_upd)))
{
//断开链接
user_disconnect();
}
}
*********************************************************************************************************
void user_disconnect(void)
{
struct gapc_disconnect_cmd * cmd = ke_msg_alloc(gapc_disconnect_cmd,
task_gapc,task_app,
gapc_disconnect_cmd);
cmd->操作= gapc_disconnect;
cmd->原因= co_error_remote_dev_power_off;
// ke_state_set(task_app,app_disabled);
ke_msg_send(cmd);
}
嗨费尔南多,
如果您不使用看门狗,应用程序是否会丢弃?如果是,应用程序摊位的地方?您是否从您的设备向中央发送通知?
关于Task_App的状态,SDK更改任务Task_App的状态,通常这是在调用用户回调之前完成的,例如,当您使用API App_easy_gap_undirectect_advertise_start()启动kadvertise_start()使用ke_state_set(task_app,app_connectable);为了将Task_App设置为可连接,此功能ke_state_set()也会在设备连接时使用。
谢谢mt_dialog.
是的,即使使用WDT禁用,应用程序摊位也是如此。当它停止PC指向“global_int_start();”。
我正在向中央发送通知。
嗨费尔南多,
正如这篇文章所述https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...由于您的设备并不粘在一起,因此它只是没有任何事情要做。在发生实际断开时的回调中是指示开始通告的设备?
谢谢mt_dialog.
在我的用例中发生断开时,外围设备不应重启广告。它应该只重启一个定时器超时的广告,这意味着它有新数据要发送到Central。
因此,在我断开外设与外设的连接之后,它必须做的就是等待计时器。在后台运行的计时器意味着什么?
嗨费尔南多,
如果您不使用睡眠模式,这意味着580保持清醒,如果设备保持清醒,而不会做任何事情(一个计时器只是在Backgroung中计数,ARM在WFI中没有做任何事情,那么它就在WFI()困扰然后看门狗将击中。如果将设备放在睡眠模式下,那么看门狗将冻结,您的计时器将继续计数。
谢谢mt_dialog.