diff --git a/components/net/at/src/at_client.c b/components/net/at/src/at_client.c index b9d0ee89cb94149a2229a603e56d4d0a9bf47efc..f46abd5cd47cc39c4551fb1f122a26abed9a8cb9 100644 --- a/components/net/at/src/at_client.c +++ b/components/net/at/src/at_client.c @@ -434,20 +434,18 @@ static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeo { rt_err_t result = RT_EOK; -__retry: - result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout)); - if (result != RT_EOK) - { - return result; - } - if(rt_device_read(client->device, 0, ch, 1) == 1) - { - return RT_EOK; - } - else + while (rt_device_read(client->device, 0, ch, 1) == 0) { - goto __retry; + result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout)); + if (result != RT_EOK) + { + return result; + } + + rt_sem_control(client->rx_notice, RT_IPC_CMD_RESET, RT_NULL); } + + return RT_EOK; } /**