Open
Description
在 at_client_para_init
初始化之后会创建client_parser
线程,负责监听 rx 的数据 (at_client.c
文件内)
client_parser
-> at_recv_readline
-> at_client_getchar(client, &ch, RT_WAITING_FOREVER);
-> rt_device_read / rt_sem_take(client->rx_notice,..)
同时at组件对外开放以下接口(at.h
文件内):
#define at_exec_cmd(resp, ...) at_obj_exec_cmd(at_client_get_first(), resp, __VA_ARGS__)
#define at_client_wait_connect(timeout) at_client_obj_wait_connect(at_client_get_first(), timeout)
#define at_client_send(buf, size) at_client_obj_send(at_client_get_first(), buf, size)
#define at_client_recv(buf, size, timeout) at_client_obj_recv(at_client_get_first(), buf, size, timeout)
#define at_set_end_sign(ch) at_obj_set_end_sign(at_client_get_first(), ch)
#define at_set_urc_table(urc_table, table_sz) at_obj_set_urc_table(at_client_get_first(), urc_table, table_sz)
如果调用 at_client_recv
,则也会在此函数内调用rt_sem_take(client->rx_notice,..)
以及rt_device_read
此会导致两个线程争抢client->rx_notice
信号量和对应串口 rx 的数据