Skip to content

at框架调用at_client_recv会引起串口接收数据冲突 #6814

Open
@i-jaffer

Description

@i-jaffer

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 的数据

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis PR/issue is a bug in the current code.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions