嵌入式技术论坛
直播中

夏日余晖

3年用户 1034经验值
擅长:嵌入式技术
私信 关注
[问答]

发送AT指令后resp中的缓存在什么时候会清除?

发送AT指令后,resp中的缓存在什么时候会清除?
1.jpg

回帖(2)

王浩

2023-5-12 15:50:09
发送完成之后,会对收到的内容进行解析,解析之后接种缓冲区中收到的内容就被读出来了。
在都执行完或者出错会释放 resp 的空间

    __exit:
        if (result != RT_EOK)
        {
            /* power off the ec200x device */
            ec200x_power_off(device);
            rt_thread_mdelay(3000);
            LOG_I("%s device initialize retry...", device->name);
        }
    }
    if (resp)
    {
        at_delete_resp(resp);
    }
举报

王浩

2023-5-12 15:50:25
AT_SEND_CMD 的宏定义如下:

#define AT_SEND_CMD(client, resp, resp_line, timeout, cmd)                                         \
    do {                                                                                           \
        (resp) = at_resp_set_info((resp), 128, (resp_line), rt_tick_from_millisecond(timeout));    \
        if (at_obj_exec_cmd((client), (resp), (cmd)) < 0)                                          \
        {                                                                                          \
            result = -RT_ERROR;                                                                    \
            goto __exit;                                                                          \
        }                                                                                          \
    } while(0)                                                                                     \
在执行 at_obj_exec_cmd() 的时候会把响应的 AT 执行发送出去,然后接收解析是一个单独的线程,
接收解析线程的入口函数是 client_parser 在这个解析线程里面会按照行(\r\n结束符)读取分析收到
的内容,所以每次发送一个指令就会去解析一条。接收线程会不停的读取解析收到的 AT 指令响应数据,
正常情况下就是发一条,然后收到响应数据,然后解析,解析正确执行下一条 AT 指令。

发送的时候一般都设置有超时时间,超时未解析正确就重发或者执行超时的逻辑。因为解析和发送是两个
线程,接收的时候会把模组的应答数据都存起来,然后一条一条去解析,不过正常情况下发送完只有马上
就能收到并解析应答数据,也就是发一条收一条,解析一条清除一条。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分