Ver código fonte

解决在判断接收字节为0与RESET信号量之间接收到数据时,导致此次数据无法被处理的bug。

Signed-off-by: RGW <rgw5267@gmail.com>
任光伟 5 anos atrás
pai
commit
27b7e0d929
1 arquivos alterados com 12 adições e 10 exclusões
  1. 12 10
      components/net/at/src/at_client.c

+ 12 - 10
components/net/at/src/at_client.c

@@ -434,18 +434,20 @@ static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeo
 {
     rt_err_t result = RT_EOK;
 
-    while (rt_device_read(client->device, 0, ch, 1) == 0)
+__retry:
+    result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout));
+    if (result != RT_EOK)
     {
-        rt_sem_control(client->rx_notice, RT_IPC_CMD_RESET, RT_NULL);
-
-        result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout));
-        if (result != RT_EOK)
-        {
-            return result;
-        }
+        return result;
+    }
+    if(rt_device_read(client->device, 0, ch, 1) == 1)
+    {
+        return RT_EOK;
+    }
+    else
+    {
+        goto __retry;
     }
-
-    return RT_EOK;
 }
 
 /**