Просмотр исходного кода

fix:内核版本V5.0.1以上osMessageQueueGet返回状态异常

wdfk-prog 1 год назад
Родитель
Сommit
256d38e4bb
2 измененных файлов с 25 добавлено и 1 удалено
  1. 24 0
      cmsis_rtthread.c
  2. 1 1
      cmsis_rtthread.h

+ 24 - 0
cmsis_rtthread.c

@@ -2130,6 +2130,29 @@ osStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint
 /// \param[out]    msg_prio      pointer to buffer for message priority or NULL.
 /// \param[in]     timeout       \ref CMSIS_RTOS_TimeOutValue or 0 in case of no time-out.
 /// \return status code that indicates the execution status of the function.
+#if defined(RT_VERSION_CHECK) && (RTTHREAD_VERSION >= RT_VERSION_CHECK(5, 0, 1))
+osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout)
+{
+    rt_ssize_t result = 0;
+    mq_cb_t *mq_cb = (mq_cb_t *)mq_id;
+
+    /* Check parameters */
+    if (RT_NULL == mq_cb || (RT_NULL == msg_ptr))
+    {
+        return osErrorParameter;
+    }
+    result = rt_mq_recv(&(mq_cb->mq), msg_ptr, mq_cb->init_msg_size, timeout);
+
+    if (result > 0)
+    {
+        return osOK;
+    }
+    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)
 {
     rt_err_t result;
@@ -2153,6 +2176,7 @@ osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *m
     else
         return osError;
 }
+#endif
 
 /// Get maximum number of messages in a Message Queue.
 /// \param[in]     mq_id         message queue ID obtained by \ref osMessageQueueNew.

+ 1 - 1
cmsis_rtthread.h

@@ -27,7 +27,7 @@ extern "C" {
 #define THREAD_NAME(thread_cb)  thread_cb->thread.parent.name
 #define RT_WEAK                 rt_weak
 
-#else   /* legacy version macros (<5.0.0) */
+#else   /* legacy version macros (<5.0.2) */
 #define KERNEL_VERSION             (((rt_uint32_t)RT_VERSION * 10000000UL)   | \
                                    ((rt_uint32_t)RT_SUBVERSION *    10000UL) | \
                                    ((rt_uint32_t)RT_REVISION *        1UL))