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