Procházet zdrojové kódy

修复适配问题

zhyolo před 2 roky
rodič
revize
d362152c0b

+ 1 - 0
SConscript

@@ -8,6 +8,7 @@ src     = Split("""
 ./src/qf/qf_act.c
 ./src/qf/qf_defer.c
 ./src/qf/qf_dyn.c
+./src/qf/qf_mem.c
 ./src/qf/qf_ps.c
 ./src/qf/qf_qact.c
 ./src/qf/qf_qeq.c

+ 1 - 1
examples/rt-thread/blinky/blinky.c

@@ -23,7 +23,7 @@
 
 #include <finsh.h>
 #include "qpc.h"
-// Q_DEFINE_THIS_FILE
+Q_DEFINE_THIS_FILE
 
 enum { BSP_TICKS_PER_SEC = 100 };
 

+ 1 - 1
ports/rt-thread/qf_port.c

@@ -99,7 +99,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
             &me->thread, /* RT-Thread thread control block */
             me->thread.name, /* unique thread name */
             &thread_function, /* thread function */
-            (ULONG)me, /* thread parameter */
+            me, /* thread parameter */
             stkSto,    /* stack start */
             stkSize,   /* stack size in bytes */
             QF_MAX_ACTIVE - me->prio,   /* RT-Thread priority */

+ 13 - 26
ports/rt-thread/qf_port.h

@@ -49,12 +49,10 @@ enum RT_Thread_ThreadAttrs {
 
 #include <rtthread.h>   /* RT-Thread API */
 
-#include "qep_port.h"  /* QEP port */
-#include "qequeue.h"   /* used for event deferral */
-#include "qf.h"        /* QF platform-independent public interface */
-#ifdef Q_SPY
-#include "qmpool.h"    /* needed only for QS-RX */
-#endif
+#include "qep_port.h" /* QEP port */
+#include "qequeue.h"  /* native QF event queue for deferring events */
+#include "qmpool.h"   /* native QF event pool */
+#include "qf.h"       /* QF platform-independent public interface */
 
 /*****************************************************************************
 * interface used only inside QF, but not in applications
@@ -65,26 +63,15 @@ enum RT_Thread_ThreadAttrs {
     #define QF_SCHED_LOCK_(prio_)   rt_enter_critical()
     #define QF_SCHED_UNLOCK_()      rt_exit_critical()
 
-    /* TreadX block pool operations... */
-    #define QF_EPOOL_TYPE_              struct rt_mempool
-    #define QF_EPOOL_INIT_(pool_, poolSto_, poolSize_, evtSize_)            \
-        Q_ALLEGE(rt_mp_init(&(pool_), (char *)"QP",                         \
-                 (poolSto_), (poolSize_), (evtSize_)) == RT_EOK)
-
-    #define QF_EPOOL_EVENT_SIZE_(pool_)                                     \
-        ((uint_fast16_t)(pool_).block_size)
-
-    #define QF_EPOOL_GET_(pool_, e_, margin_, qs_id_) do {                  \
-        if ((pool_).block_free_count > (margin_)) {                         \
-            e_ = rt_mp_alloc(&(pool_), RT_WAITING_NO);                      \
-        }                                                                   \
-        else {                                                              \
-            (e_) = (QEvt *)0;                                               \
-        }                                                                   \
-    } while (false)
-
-    #define QF_EPOOL_PUT_(dummy, e_, qs_id_)                                \
-        rt_mp_free((void *)(e_));
+    /* native QF event pool operations */
+    #define QF_EPOOL_TYPE_            QMPool
+    #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
+        (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
+    #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
+    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
+    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
+        (QMPool_put(&(p_), (e_), (qs_id_)))
 
 #endif /* ifdef QP_IMPL */