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
00028 #ifndef qk_h
00029 #define qk_h
00030
00037
00038 #include "qequeue.h"
00039 #include "qmpool.h"
00040 #include "qpset.h"
00041
00042
00044
00045
00053 #define QF_EQUEUE_TYPE QEQueue
00054
00055 #if defined(QK_TLS) || defined(QK_EXT_SAVE)
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 #define QF_OS_OBJECT_TYPE uint8_t
00068
00076 #define QF_THREAD_TYPE void *
00077 #endif
00078
00079 #if (QF_MAX_ACTIVE <= 8)
00080 extern QPSet8 volatile QK_readySet_;
00081 #else
00082 extern QPSet64 volatile QK_readySet_;
00083 #endif
00084
00085 extern uint8_t volatile QK_currPrio_;
00086 extern uint8_t volatile QK_intNest_;
00087
00088
00089
00096
00098 #define QACTIVE_EQUEUE_WAIT_(me_) \
00099 Q_ASSERT((me_)->m_eQueue.m_frontEvt != (QEvent *)0)
00100
00114 #define QACTIVE_EQUEUE_SIGNAL_(me_) \
00115 QK_readySet_.insert((me_)->m_prio); \
00116 if (QK_intNest_ == (uint8_t)0) { \
00117 QK_SCHEDULE_(); \
00118 } else ((void)0)
00119
00129 #define QACTIVE_EQUEUE_ONEMPTY_(me_) \
00130 QK_readySet_.remove((me_)->m_prio)
00131
00132
00133
00140 #define QF_EPOOL_TYPE_ QMPool
00141
00147 #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
00148 (p_).init(poolSto_, poolSize_, evtSize_)
00149
00156 #define QF_EPOOL_EVENT_SIZE_(p_) ((p_).getBlockSize())
00157
00164 #define QF_EPOOL_GET_(p_, e_) ((e_) = (QEvent *)(p_).get())
00165
00172 #define QF_EPOOL_PUT_(p_, e_) ((p_).put(e_))
00173
00174 #ifndef QK_NO_MUTEX
00175
00176
00177
00178
00179
00180
00181 typedef uint8_t QMutex;
00182 #endif // QK_NO_MUTEX
00183
00190
00195 class QK {
00196 public:
00197
00205 static char const Q_ROM * Q_ROM_VAR getVersion(void);
00206
00215 static char const Q_ROM * Q_ROM_VAR getPortVersion(void);
00216
00227 static void onIdle(void);
00228
00229 #ifndef QK_NO_MUTEX
00230
00235
00240 static QMutex mutexLock(uint8_t prioCeiling);
00241
00249 static void mutexUnlock(QMutex mutex);
00250
00251 #endif // QK_NO_MUTEX
00252
00253 };
00254
00255 extern "C" {
00256
00261 void QK_init(void);
00262
00263
00264 #ifndef QF_INT_KEY_TYPE
00265 void QK_schedule_(void);
00266 void QK_scheduleExt_(void);
00267
00268 #define QK_SCHEDULE_() QK_schedule_()
00269 #else
00270
00287 void QK_schedule_(QF_INT_KEY_TYPE intLockKey);
00288
00302 void QK_scheduleExt_(QF_INT_KEY_TYPE intLockKey);
00303
00308 #define QK_SCHEDULE_() QK_schedule_(intLockKey_)
00309
00310 #endif
00311 }
00312
00314
00315 #ifdef Q_SPY // QS software tracing enabled?
00316 #ifndef qs_h
00317 #include "qs_port.h"
00318 #endif
00319 #else
00320 #ifndef qs_dummy_h
00321 #include "qs_dummy.h"
00322 #endif
00323 #endif // Q_SPY
00324
00325 #endif // qk_h