Przeglądaj źródła

feat: 对RTT5.0.2以上版本的支持

wdfk-prog 1 rok temu
rodzic
commit
67f8eab36d
3 zmienionych plików z 21 dodań i 7 usunięć
  1. 3 7
      cmsis_rtthread.c
  2. 17 0
      cmsis_rtthread.h
  3. 1 0
      os_systick.c

+ 3 - 7
cmsis_rtthread.c

@@ -15,10 +15,6 @@
 #include <os_tick.h>
 #include <rthw.h>
 
-///< RT-Thread Kernel version
-#define KERNEL_VERSION             (((rt_uint32_t)RT_VERSION * 10000000UL)   | \
-                                   ((rt_uint32_t)RT_SUBVERSION *    10000UL) | \
-                                   ((rt_uint32_t)RT_REVISION *        1UL))
 #define KERNEL_Id     "RT-Thread"  ///< Kernel identification string
 
 #define DEFAULT_STACK_SIZE 512
@@ -319,7 +315,7 @@ uint32_t osKernelSuspend (void)
     {
         for (node = info_thread->object_list.next; node != &(info_thread->object_list); node = node->next)
         {
-            thread = rt_list_entry(node, struct rt_thread, list);
+            thread = thread_rt_list_entry(node, rt_thread);
 
             if (thread->thread_timer.parent.flag & RT_TIMER_FLAG_ACTIVATED)
             {
@@ -517,7 +513,7 @@ const char *osThreadGetName(osThreadId_t thread_id)
         return RT_NULL;
     }
 
-    return thread_cb->thread.name;
+    return THREAD_NAME(thread_cb);
 }
 
 /// Return the thread ID of the current running thread.
@@ -864,7 +860,7 @@ uint32_t osThreadEnumerate(osThreadId_t *thread_array, uint32_t array_items)
     rt_enter_critical();
     for (node = info->object_list.next; node != &(info->object_list); node = node->next)
     {
-        thread = rt_list_entry(node, struct rt_thread, list);
+        thread = thread_rt_list_entry(node, rt_thread);
         thread_array[thread_count] = (osThreadId_t)thread;
         thread_count++;
 

+ 17 - 0
cmsis_rtthread.h

@@ -18,6 +18,23 @@
 extern "C" {
 #endif
 
+///< RT-Thread Kernel version
+#if defined(RT_VERSION_CHECK) && (RTTHREAD_VERSION >= RT_VERSION_CHECK(5, 0, 2))
+#define KERNEL_VERSION             (((rt_uint32_t)RT_VERSION_MAJOR * 10000000UL)    | \
+                                   ((rt_uint32_t)RT_VERSION_MINOR  *    10000UL)    | \
+                                   ((rt_uint32_t)RT_VERSION_PATCH  *        1UL))
+#define thread_rt_list_entry(node, rt_thread)   rt_list_entry(node, struct rt_thread, tlist)
+#define THREAD_NAME(thread_cb)  thread_cb->thread.parent.name
+#define RT_WEAK                 rt_weak
+
+#else   /* legacy version macros (<5.0.0) */
+#define KERNEL_VERSION             (((rt_uint32_t)RT_VERSION * 10000000UL)   | \
+                                   ((rt_uint32_t)RT_SUBVERSION *    10000UL) | \
+                                   ((rt_uint32_t)RT_REVISION *        1UL))
+#define thread_rt_list_entry(node, rt_thread)   rt_list_entry(node, struct rt_thread, list)
+#define THREAD_NAME(thread_cb)  thread_cb->thread.name
+#endif
+
 typedef struct
 {
     rt_uint8_t flags;

+ 1 - 0
os_systick.c

@@ -23,6 +23,7 @@
  */
 
 #include <rtthread.h>
+#include "cmsis_rtthread.h"
 #include "os_tick.h"
 #include "board.h"