Эх сурвалжийг харах

fix: 修复 osThreadJoin、osMessageQueuePut 和 osMessageQueueGet 函数的超时处理

- 在 osThreadJoin 中添加超时返回值处理
- 在 osMessageQueuePut 中添加超时返回值处理
- 在 osMessageQueueGet 中区分超时和资源不可用错误
wdfk-prog 7 сар өмнө
parent
commit
d07486f517
1 өөрчлөгдсөн 19 нэмэгдсэн , 4 устгасан
  1. 19 4
      cmsis_rtthread.c

+ 19 - 4
cmsis_rtthread.c

@@ -785,11 +785,16 @@ osStatus_t osThreadJoin(osThreadId_t thread_id)
 
         if (thread_cb->flags & MALLOC_CB)
             rt_free(thread_cb);
+        return osOK;
+    }
+    else if (-RT_ETIMEOUT == result)
+    {
+        return osErrorTimeout;
     }
     else
+    {
         return osError;
-
-    return osOK;
+    }
 }
 
 /// Terminate execution of current running thread.
@@ -2148,8 +2153,14 @@ osStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint
         return osOK;
     else if (-RT_EFULL == result)
         return osErrorResource;
+    else if (-RT_ETIMEOUT == result)
+    {
+        return osErrorTimeout;
+    }
     else
+    {
         return osError;
+    }
 }
 
 /// Get a Message from a Queue or timeout if Queue is empty.
@@ -2181,10 +2192,14 @@ osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *m
     {
         return osOK;
     }
-    else
+    else if (-RT_ETIMEOUT == result)
     {
-        return osError;
+        if (0U == timeout)
+            return osErrorResource;
+        return osErrorTimeout;
     }
+    else
+        return osError;
 }
 #else   /* legacy version macros (<5.0.1) */
 osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout)