每当外设发出“GAPC_DISCONNECT_CMD”消息时,我的应用程序就会断开与中央的连接,但也会由于看门狗超时而崩溃。
断开消息在10秒(使用计时器)的不活动(没有数据发送或接收,从客户端)后发出。如果禁用wdt,应用程序也不能正常运行。
看门狗设置为FF。
我可能漏掉了什么,断开连接前应该做什么?
还有一个问题,当发出“gapc_disconnect_cmd”时,“TASK_APP”状态是否被设置为非连接状态,如“APP_DISABLED”或“APP_CONNECTABLE”?
如果不是,它又会怎样,什么时候变成那样?当发出“gapc_disconnect_cmd”时,我应该改变“TASK_APP”状态吗?
**********************************************************************************************************
Static 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);
}
*********************************************************************************************************
Static 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);
}
*********************************************************************************************************
静态孔隙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 ();
}
}
*********************************************************************************************************
空白user_disconnect(空白)
{
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_undirected_advertise_start()这个用ke_state_set (TASK_APP APP_CONNECTABLE);为了将TASK_APP设置为可连接的,这个函数ke_state_set()也会在设备连接等情况下使用。
由于MT_dialog
是的,即使禁用了wdt,应用程序也会停止运行。当它停止时,PC指向“GLOBAL_INT_START();”。
我正在向中心发送通知。
嗨费尔南多,
正如这篇文章中提到的https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。因为你的设备并没有被固定在任何地方,它只是在无事可做的情况下继续运行。在回调中,当实际断开连接发生时,设备是否被指示开始通告?
由于MT_dialog
在我的用例中,当发生断开连接时,外设不应该重新启动发布。它应该只有在计时器超时时才重新启动广告,这意味着它有新的数据要发送到中央。
因此,当我断开与外设的链接后,它所要做的就是等待计时器超时。在后台运行计时器毫无意义?
嗨费尔南多,
如果你不使用睡眠模式,这意味着580保持清醒,如果设备保持清醒没有做任何事情(计时器只是在后台计数,ARM不做任何事情,所以它在WFI中等待)卡在WFI(),然后看门狗将点击。如果你将你的设备置于睡眠模式,那么看门狗将冻结,你的计时器将继续计数。
由于MT_dialog