6 posts / 0 new
Last post
comprends
Offline
Last seen:2 days 10 hours ago
加入:2019-06-21 07:31
关于连接成功后,操作时间过长,断开的问题

我按照Dialog SDK 5.0.3培训材料,基于ble_app_profile工程,修改了user_catch_rest_hndl函数中的case CUST1_IDX_LED_STATE_VAL,作为接收我的手机端传来的命令,进一步在主循环里进行判断操作。
代码如下:
void user_catch_rest_hndl(ke_msg_id_t const msgid,
void const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{

switch(msgid)
{
case CUSTS1_VAL_WRITE_IND: //特征值已被写入
{
struct custs1_val_write_ind const *msg_param = (struct custs1_val_write_ind const *)(param);

switch (msg_param->handle)
{
case CUST1_IDX_CONTROL_POINT_VAL:
user_custs1_ctrl_wr_ind_handler(msgid, msg_param, dest_id, src_id);
break;

case CUST1_IDX_LED_STATE_VAL:
memcpy (&ble_Rec &msg_param[0] - >价值, msg_param->length);
VAL_FLAG = 1; //val接收完毕
// user_custs1_led_wr_ind_handler(msgid, msg_param, dest_id, src_id);
break;
..........

主循环
while(1)
{
if(VAL_FLAG == 1)
{
Audion_WriteCMD(ble_Rec); //接收蓝牙命令并执行相关操作
VAL_FLAG = 0;
}

do {
// schedule all pending events
schedule_while_ble_on();

}
while (app_asynch_proc() != GOTO_SLEEP);
————————————————————————————————————————————————————
其中Audion_WriteCMD,为我对IO的操作,当我这个操作需要进行5s+时,连接就会断开,等待该操作完毕后,蓝牙方可重新连接。
请问这是什么原因呢,有办法解决这个吗,我的操作命令中最长的需要进行6s左右,虽然操作是可以进行完毕的,但是会断掉,随后进行下一步操作的话就得重新连接,有点不方便。

主机是手机端,LightBlue ,android端。

Device:
CYibin
Offline
Last seen:5 months 3 weeks ago
Staff
加入:2017-12-14 02:48
你好,

你好,

Audion_WriteCMD 函数执行的时间过长,导致蓝牙事件没有处理的机会,导致连接断开

你需要用状态机的方式,将这段阻塞拆分成多个时间段执行。

comprends
Offline
Last seen:2 days 10 hours ago
加入:2019-06-21 07:31
好的,请问哪个例程我可以参考一下呢

好的,请问哪个例程我可以参考一下呢

CYibin
Offline
Last seen:5 months 3 weeks ago
Staff
加入:2017-12-14 02:48
你好,

你好,

这属于编程技巧的范畴,可从网上查找相关状态机的相关知识。

comprends
Offline
Last seen:2 days 10 hours ago
加入:2019-06-21 07:31
明白 谢谢了

明白 谢谢了

CYibin
Offline
Last seen:5 months 3 weeks ago
Staff
加入:2017-12-14 02:48
不客气~

不客气~