00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef qk_h
00029 #define qk_h
00030
00040 #include "qequeue.h"
00041 #include "qmpool.h"
00042 #include "qpset.h"
00043
00044
00045
00046
00055 #define QF_EQUEUE_TYPE QEQueue
00056
00057 #if defined(QK_TLS) || defined(QK_EXT_SAVE)
00058
00070 #define QF_OS_OBJECT_TYPE uint8_t
00071
00080 #define QF_THREAD_TYPE void *
00081 #endif
00082
00083 #if (QF_MAX_ACTIVE <= 8)
00084 extern QPSet8 volatile QK_readySet_;
00085 #else
00086 extern QPSet64 volatile QK_readySet_;
00087 #endif
00088
00089
00090 extern uint8_t volatile QK_currPrio_;
00091 extern uint8_t volatile QK_intNest_;
00093
00094
00104 #define QACTIVE_EQUEUE_WAIT_(me_) \
00105 Q_ASSERT((me_)->eQueue.frontEvt != (QEvent *)0)
00106
00107 #if (QF_MAX_ACTIVE <= 8)
00108 #define QACTIVE_EQUEUE_SIGNAL_(me_) \
00109 QPSet8_insert(&QK_readySet_, (me_)->prio); \
00110 if (QK_intNest_ == (uint8_t)0) { \
00111 QK_SCHEDULE_(); \
00112 } \
00113 else ((void)0)
00114
00115 #define QACTIVE_EQUEUE_ONEMPTY_(me_) \
00116 QPSet8_remove(&QK_readySet_, (me_)->prio)
00117 #else
00118
00132 #define QACTIVE_EQUEUE_SIGNAL_(me_) \
00133 QPSet64_insert(&QK_readySet_, (me_)->prio); \
00134 if (QK_intNest_ == (uint8_t)0) { \
00135 QK_SCHEDULE_(); \
00136 } \
00137 else ((void)0)
00138
00152 #define QACTIVE_EQUEUE_ONEMPTY_(me_) \
00153 QPSet64_remove(&QK_readySet_, (me_)->prio)
00154 #endif
00155
00156
00157
00158
00166 #define QF_EPOOL_TYPE_ QMPool
00167
00174 #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
00175 QMPool_init(&(p_), poolSto_, poolSize_, evtSize_)
00176
00184 #define QF_EPOOL_EVENT_SIZE_(p_) ((p_).blockSize)
00185
00193 #define QF_EPOOL_GET_(p_, e_) ((e_) = (QEvent *)QMPool_get(&(p_)))
00194
00202 #define QF_EPOOL_PUT_(p_, e_) (QMPool_put(&(p_), (e_)))
00203
00209 void QK_init(void);
00210
00222 void QK_onIdle(void);
00223
00232 char const Q_ROM * Q_ROM_VAR QK_getVersion(void);
00233
00243 char const Q_ROM * Q_ROM_VAR QK_getPortVersion(void);
00244
00245 #ifndef QK_NO_MUTEX
00246
00253 typedef uint8_t QMutex;
00254
00265 QMutex QK_mutexLock(uint8_t prioCeiling);
00266
00275 void QK_mutexUnlock(QMutex mutex);
00276
00277 #endif
00278
00279
00280 #ifndef QF_INT_KEY_TYPE
00281 void QK_schedule_(void);
00282 void QK_scheduleExt_(void);
00283
00284 #define QK_SCHEDULE_() QK_schedule_()
00285 #else
00286
00304 void QK_schedule_(QF_INT_KEY_TYPE intLockKey);
00305
00320 void QK_scheduleExt_(QF_INT_KEY_TYPE intLockKey);
00321
00331 #define QK_SCHEDULE_() QK_schedule_(intLockKey_)
00332 #endif
00333
00334
00335
00336 #ifdef Q_SPY
00337 #ifndef qs_h
00338 #include "qs_port.h"
00339 #endif
00340 #else
00341 #ifndef qs_dummy_h
00342 #include "qs_dummy.h"
00343 #endif
00344 #endif
00345
00346 #endif