49 #define CH_KERNEL_STABLE        1    58 #define CH_KERNEL_VERSION       "3.2.2"    63 #define CH_KERNEL_MAJOR         3    68 #define CH_KERNEL_MINOR         2    73 #define CH_KERNEL_PATCH         2    83 #if !defined(FALSE) || defined(__DOXYGEN__)    91 #if !defined(TRUE) || defined(__DOXYGEN__)   100 #define MSG_OK                  (msg_t)0       101 #define MSG_TIMEOUT             (msg_t)-1      103 #define MSG_RESET               (msg_t)-2      117 #define TIME_IMMEDIATE          ((sysinterval_t)-1)   123 #define TIME_INFINITE           ((sysinterval_t)0)   128 #define TIME_MAX_INTERVAL       ((sysinterval_t)-2)   133 #define TIME_MAX_SYSTIME        ((systime_t)-1)   140 #define NIL_STATE_READY         (tstate_t)0    142 #define NIL_STATE_SLEEPING      (tstate_t)1    143 #define NIL_STATE_SUSP          (tstate_t)2    144 #define NIL_STATE_WTQUEUE       (tstate_t)3    145 #define NIL_STATE_WTOREVT       (tstate_t)4    146 #define NIL_THD_IS_READY(tp)    ((tp)->state == NIL_STATE_READY)   147 #define NIL_THD_IS_SLEEPING(tp) ((tp)->state == NIL_STATE_SLEEPING)   148 #define NIL_THD_IS_SUSP(tp)     ((tp)->state == NIL_STATE_SUSP)   149 #define NIL_THD_IS_WTQUEUE(tp)  ((tp)->state == NIL_STATE_WTQUEUE)   150 #define NIL_THD_IS_WTOREVT(tp)  ((tp)->state == NIL_STATE_WTOREVT)   160 #define ALL_EVENTS              ((eventmask_t)-1)   165 #define EVENT_MASK(eid)         ((eventmask_t)(1 << (eid)))   177 #if !defined(CH_CFG_NUM_THREADS) || defined(__DOXYGEN__)   178 #define CH_CFG_NUM_THREADS                  2   185 #if !defined(CH_CFG_ST_RESOLUTION) || defined(__DOXYGEN__)   186 #define CH_CFG_ST_RESOLUTION                32   195 #if !defined(CH_CFG_ST_FREQUENCY) || defined(__DOXYGEN__)   196 #define CH_CFG_ST_FREQUENCY                 100   207 #if !defined(CH_CFG_ST_TIMEDELTA) || defined(__DOXYGEN__)   208 #define CH_CFG_ST_TIMEDELTA                 0   217 #if !defined(CH_CFG_USE_SEMAPHORES) || defined(__DOXYGEN__)   218 #define CH_CFG_USE_SEMAPHORES               TRUE   228 #if !defined(CH_CFG_USE_MUTEXES) || defined(__DOXYGEN__)   229 #define CH_CFG_USE_MUTEXES                  FALSE   238 #if !defined(CH_CFG_USE_EVENTS) || defined(__DOXYGEN__)   239 #define CH_CFG_USE_EVENTS                   TRUE   250 #if !defined(CH_CFG_USE_MAILBOXES) || defined(__DOXYGEN__)   251 #define CH_CFG_USE_MAILBOXES                TRUE   261 #if !defined(CH_CFG_USE_MEMCORE) || defined(__DOXYGEN__)   262 #define CH_CFG_USE_MEMCORE                  TRUE   272 #if !defined(CH_CFG_USE_HEAP) || defined(__DOXYGEN__)   273 #define CH_CFG_USE_HEAP                     TRUE   283 #if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__)   284 #define CH_CFG_USE_MEMPOOLS                 TRUE   293 #if !defined(CH_CFG_USE_FACTORY) || defined(__DOXYGEN__)   294 #define CH_CFG_USE_FACTORY                  TRUE   302 #if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) || defined(__DOXYGEN__)   303 #define CH_CFG_FACTORY_MAX_NAMES_LENGTH     8   309 #if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) || defined(__DOXYGEN__)   310 #define CH_CFG_FACTORY_OBJECTS_REGISTRY     TRUE   316 #if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) || defined(__DOXYGEN__)   317 #define CH_CFG_FACTORY_GENERIC_BUFFERS      TRUE   323 #if !defined(CH_CFG_FACTORY_SEMAPHORES) || defined(__DOXYGEN__)   324 #define CH_CFG_FACTORY_SEMAPHORES           TRUE   330 #if !defined(CH_CFG_FACTORY_MAILBOXES) || defined(__DOXYGEN__)   331 #define CH_CFG_FACTORY_MAILBOXES            TRUE   337 #if !defined(CH_CFG_FACTORY_OBJ_FIFOS) || defined(__DOXYGEN__)   338 #define CH_CFG_FACTORY_OBJ_FIFOS            TRUE   347 #if !defined(CH_DBG_STATISTICS) || defined(__DOXYGEN__)   348 #define CH_DBG_STATISTICS                   FALSE   357 #if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)   358 #define CH_DBG_SYSTEM_STATE_CHECK           FALSE   366 #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)   367 #define CH_DBG_ENABLE_CHECKS                FALSE   375 #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)   376 #define CH_DBG_ENABLE_ASSERTS               FALSE   384 #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)   385 #define CH_DBG_ENABLE_STACK_CHECK           FALSE   391 #if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)   392 #define CH_CFG_SYSTEM_INIT_HOOK() {}   399 #if !defined(CH_CFG_THREAD_EXT_FIELDS) || defined(__DOXYGEN__)   400 #define CH_CFG_THREAD_EXT_FIELDS   406 #if !defined(CH_CFG_THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)   407 #define CH_CFG_THREAD_EXT_INIT_HOOK(tp) {}   416 #if !defined(CH_CFG_IDLE_ENTER_HOOK) || defined(__DOXYGEN__)   417 #define CH_CFG_IDLE_ENTER_HOOK() {}   426 #if !defined(CH_CFG_IDLE_LEAVE_HOOK) || defined(__DOXYGEN__)   427 #define CH_CFG_IDLE_LEAVE_HOOK() {}   433 #if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)   434 #define CH_CFG_SYSTEM_HALT_HOOK(reason) {}   442 #if !defined(CH_CUSTOMER_LIC_NIL) || !defined(CH_LICENSE_FEATURES)   443 #error "malformed chlicense.h"   446 #if CH_CUSTOMER_LIC_NIL == FALSE   447 #error "ChibiOS/NIL not licensed"   450 #if (CH_LICENSE_FEATURES != CH_FEATURES_FULL) &&                            \   451     (CH_LICENSE_FEATURES != CH_FEATURES_INTERMEDIATE) &&                    \   452     (CH_LICENSE_FEATURES != CH_FEATURES_BASIC)   453 #error "invalid CH_LICENSE_FEATURES setting"   457 #if (CH_LICENSE_FEATURES == CH_FEATURES_INTERMEDIATE) ||                    \   458     (CH_LICENSE_FEATURES == CH_FEATURES_BASIC)   461 #if CH_CFG_ST_FREQUENCY > 1000   462 #undef CH_CFG_ST_FREQUENCY   463 #define CH_CFG_ST_FREQUENCY                 1000   470 #if CH_LICENSE_FEATURES == CH_FEATURES_BASIC   473 #undef CH_CFG_ST_TIMEDELTA   474 #define CH_CFG_ST_TIMEDELTA                 0   478 #if !defined(_CHIBIOS_NIL_CONF_)   479 #error "missing or wrong configuration file"   482 #if !defined(_CHIBIOS_NIL_CONF_VER_3_2_)   483 #error "obsolete or unknown configuration file"   486 #if CH_CFG_NUM_THREADS < 1   487 #error "at least one thread must be defined"   490 #if CH_CFG_NUM_THREADS > 16   491 #error "ChibiOS/NIL is not recommended for thread-intensive applications,"  \   492        "consider ChibiOS/RT instead"   495 #if (CH_CFG_ST_RESOLUTION != 16) && (CH_CFG_ST_RESOLUTION != 32)   496 #error "invalid CH_CFG_ST_RESOLUTION specified, must be 16 or 32"   499 #if CH_CFG_ST_FREQUENCY <= 0   500 #error "invalid CH_CFG_ST_FREQUENCY specified, must be greater than zero"   503 #if (CH_CFG_ST_TIMEDELTA < 0) || (CH_CFG_ST_TIMEDELTA == 1)   504 #error "invalid CH_CFG_ST_TIMEDELTA specified, must "                       \   505        "be zero or greater than one"   508 #if CH_CFG_USE_MUTEXES == TRUE   509 #error "mutexes not yet supported"   512 #if CH_DBG_STATISTICS == TRUE   513 #error "statistics not yet supported"   516 #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) ||                                  \   517     (CH_DBG_ENABLE_CHECKS == TRUE)      ||                                  \   518     (CH_DBG_ENABLE_ASSERTS == TRUE)     ||                                  \   519     (CH_DBG_ENABLE_STACK_CHECK == TRUE)   520 #define NIL_DBG_ENABLED                 TRUE   522 #define NIL_DBG_ENABLED                 FALSE   527 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__)   528 #define THD_IDLE_BASE                   (&__main_thread_stack_base__)   529 #define THD_IDLE_END                    (&__main_thread_stack_end__)   531 #define THD_IDLE_BASE                   NULL   532 #define THD_IDLE_END                    NULL   539 #if (CH_CFG_ST_RESOLUTION == 32) || defined(__DOXYGEN__)   585 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)   597 typedef void (*
tfunc_t)(
void *p);
   633 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)   636 #if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)   642 #if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)   645 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__)   673 #if (CH_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__)   679 #if (CH_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__)   689 #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) || defined(__DOXYGEN__)   699 #if (NIL_DBG_ENABLED == TRUE) || defined(__DOXYGEN__)   707   const char            * 
volatile dbg_panic_msg;
   719 #if CH_DBG_SYSTEM_STATE_CHECK == TRUE   720 #define _dbg_enter_lock() (nil.lock_cnt = (cnt_t)1)   721 #define _dbg_leave_lock() (nil.lock_cnt = (cnt_t)0)   727 #define __CH_STRINGIFY(a) #a   736 #define THD_TABLE_BEGIN                                                     \   737   const thread_config_t nil_thd_configs[CH_CFG_NUM_THREADS + 1] = {   742 #define THD_TABLE_ENTRY(wap, name, funcp, arg)                              \   743   {wap, ((stkalign_t *)(wap)) + (sizeof (wap) / sizeof(stkalign_t)),        \   749 #define THD_TABLE_END                                                       \   750   {THD_IDLE_BASE, THD_IDLE_END, "idle", NULL, NULL}                         \   762 #define MEM_ALIGN_MASK(a)       ((size_t)(a) - 1U)   770 #define MEM_ALIGN_PREV(p, a)    ((size_t)(p) & ~MEM_ALIGN_MASK(a))   778 #define MEM_ALIGN_NEXT(p, a)    MEM_ALIGN_PREV((size_t)(p) +                \   779                                                MEM_ALIGN_MASK(a), (a))   787 #define MEM_IS_ALIGNED(p, a)    (((size_t)(p) & MEM_ALIGN_MASK(a)) == 0U)   795 #define MEM_IS_VALID_ALIGNMENT(a)                                           \   796   (((size_t)(a) != 0U) && (((size_t)(a) & ((size_t)(a) - 1U)) == 0U))   810 #define THD_WORKING_AREA_SIZE(n) MEM_ALIGN_NEXT(PORT_WA_SIZE(n),            \   823 #define THD_WORKING_AREA(s, n) PORT_WORKING_AREA(s, n)   834 #define THD_FUNCTION(tname, arg) PORT_THD_FUNCTION(tname, arg)   851 #if defined(PORT_IRQ_IS_VALID_PRIORITY) || defined(__DOXYGEN__)   852 #define CH_IRQ_IS_VALID_PRIORITY(prio)                                      \   853   PORT_IRQ_IS_VALID_PRIORITY(prio)   855 #define CH_IRQ_IS_VALID_PRIORITY(prio) false   869 #if defined(PORT_IRQ_IS_VALID_KERNEL_PRIORITY) || defined(__DOXYGEN__)   870 #define CH_IRQ_IS_VALID_KERNEL_PRIORITY(prio)                               \   871   PORT_IRQ_IS_VALID_KERNEL_PRIORITY(prio)   873 #define CH_IRQ_IS_VALID_KERNEL_PRIORITY(prio) false   883 #define CH_IRQ_PROLOGUE()                                                   \   884   PORT_IRQ_PROLOGUE();                                                      \   885   _dbg_check_enter_isr()   893 #define CH_IRQ_EPILOGUE()                                                   \   894   _dbg_check_leave_isr();                                                   \   904 #define CH_IRQ_HANDLER(id) PORT_IRQ_HANDLER(id)   918 #define CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id)   938 #define TIME_S2I(secs)                                                      \   939   ((sysinterval_t)((time_conv_t)(secs) * (time_conv_t)CH_CFG_ST_FREQUENCY))   954 #define TIME_MS2I(msecs)                                                    \   955   ((sysinterval_t)((((time_conv_t)(msecs) *                                 \   956                      (time_conv_t)CH_CFG_ST_FREQUENCY) +                    \   957                     (time_conv_t)999) / (time_conv_t)1000))   972 #define TIME_US2I(usecs)                                                    \   973   ((sysinterval_t)((((time_conv_t)(usecs) *                                 \   974                      (time_conv_t)CH_CFG_ST_FREQUENCY) +                    \   975                     (time_conv_t)999999) / (time_conv_t)1000000))   990 #define TIME_I2S(interval)                                                  \   991   (time_secs_t)(((time_conv_t)(interval) +                                  \   992                  (time_conv_t)CH_CFG_ST_FREQUENCY -                         \   993                  (time_conv_t)1) / (time_conv_t)CH_CFG_ST_FREQUENCY)  1008 #define TIME_I2MS(interval)                                                 \  1009   (time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000) +           \  1010                   (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) /      \  1011                  (time_conv_t)CH_CFG_ST_FREQUENCY)  1026 #define TIME_I2US(interval)                                                 \  1027     (time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) +      \  1028                     (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) /    \  1029                    (time_conv_t)CH_CFG_ST_FREQUENCY)  1042 #define _THREADS_QUEUE_DATA(name) {(cnt_t)0}  1051 #define _THREADS_QUEUE_DECL(name)                                           \  1052   threads_queue_t name = _THREADS_QUEUE_DATA(name)  1068 #define _SEMAPHORE_DATA(name, n) {n}  1079 #define SEMAPHORE_DECL(name, n) semaphore_t name = _SEMAPHORE_DATA(name, n)  1096 #if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__)  1097 #define chSysGetRealtimeCounterX() (rtcnt_t)port_rt_get_counter_value()  1108 #define chSysDisable() {                                                    \  1110   _dbg_check_disable();                                                     \  1124 #define chSysSuspend() {                                                    \  1126   _dbg_check_suspend();                                                     \  1138 #define chSysEnable() {                                                     \  1139   _dbg_check_enable();                                                      \  1148 #define chSysLock() {                                                       \  1150   _dbg_check_lock();                                                        \  1158 #define chSysUnlock() {                                                     \  1159   _dbg_check_unlock();                                                      \  1175 #define chSysLockFromISR() {                                                \  1176   port_lock_from_isr();                                                     \  1177   _dbg_check_lock_from_isr();                                               \  1193 #define chSysUnlockFromISR() {                                              \  1194   _dbg_check_unlock_from_isr();                                             \  1195   port_unlock_from_isr();                                                   \  1207 #define chSchIsRescRequiredI() ((bool)(nil.current != nil.next))  1214 #define chThdGetSelfX() nil.current  1226 #define chThdSleepSeconds(secs) chThdSleep(TIME_S2I(secs))  1239 #define chThdSleepMilliseconds(msecs) chThdSleep(TIME_MS2I(msecs))  1252 #define chThdSleepMicroseconds(usecs) chThdSleep(TIME_US2I(usecs))  1261 #define chThdSleepS(timeout)                                                \  1262   (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, timeout)  1272 #define chThdSleepUntilS(abstime)                                           \  1273   (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING,                           \  1274                               chTimeDiffX(chVTGetSystemTimeX(), (abstime)))  1283 #define chThdQueueObjectInit(tqp) ((tqp)->cnt = (cnt_t)0)  1295 #define chThdQueueIsEmptyI(tqp) ((bool)(tqp->cnt >= (cnt_t)0))  1297 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)  1307 #define chSemObjectInit(sp, n) ((sp)->cnt = (n))  1321 #define chSemWait(sp) chSemWaitTimeout(sp, TIME_INFINITE)  1335 #define chSemWaitS(sp) chSemWaitTimeoutS(sp, TIME_INFINITE)  1345 #define chSemFastWaitI(sp) ((sp)->cnt--)  1356 #define chSemFastSignalI(sp) ((sp)->cnt++)  1363 #define chSemGetCounterI(sp) ((sp)->cnt)  1379 #if (CH_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__)  1380 #define chVTGetSystemTimeX() (nil.systime)  1382 #define chVTGetSystemTimeX() port_timer_get_time()  1393 #define chVTTimeElapsedSinceX(start)                                        \  1394   chTimeDiffX((start), chVTGetSystemTimeX())  1405 #define chTimeAddX(systime, interval)                                       \  1406   ((systime_t)(systime) + (systime_t)(interval))  1417 #define chTimeDiffX(start, end)                                             \  1418   ((sysinterval_t)((systime_t)((systime_t)(end) - (systime_t)(start))))  1433 #define chTimeIsInRangeX(time, start, end)                                  \  1434   ((bool)((systime_t)((systime_t)(time) - (systime_t)(start)) <             \  1435           (systime_t)((systime_t)(end) - (systime_t)(start))))  1447 #if !defined(chDbgCheck)  1448 #define chDbgCheck(c) do {                                                  \  1450   if (CH_DBG_ENABLE_CHECKS != FALSE) {                                      \  1453       chSysHalt(__func__);                                                  \  1473 #if !defined(chDbgAssert)  1474 #define chDbgAssert(c, r) do {                                              \  1476   if (CH_DBG_ENABLE_ASSERTS != FALSE) {                                     \  1479       chSysHalt(__func__);                                                  \  1487 #if CH_DBG_SYSTEM_STATE_CHECK == FALSE  1488 #define _dbg_enter_lock()  1489 #define _dbg_leave_lock()  1490 #define _dbg_check_disable()  1491 #define _dbg_check_suspend()  1492 #define _dbg_check_enable()  1493 #define _dbg_check_lock()  1494 #define _dbg_check_unlock()  1495 #define _dbg_check_lock_from_isr()  1496 #define _dbg_check_unlock_from_isr()  1497 #define _dbg_check_enter_isr()  1498 #define _dbg_check_leave_isr()  1499 #define chDbgCheckClassI()  1500 #define chDbgCheckClassS()  1507 #if !defined(__DOXYGEN__)  1508 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__)  1509 extern stkalign_t __main_thread_stack_base__, __main_thread_stack_end__;
  1541 #if CH_CFG_USE_SEMAPHORES == TRUE  1549 #if CH_CFG_USE_EVENTS == TRUE  1554 #if CH_DBG_SYSTEM_STATE_CHECK == TRUE  1555   void _dbg_check_disable(
void);
  1556   void _dbg_check_suspend(
void);
  1557   void _dbg_check_enable(
void);
  1558   void _dbg_check_lock(
void);
  1559   void _dbg_check_unlock(
void);
  1560   void _dbg_check_lock_from_isr(
void);
  1561   void _dbg_check_unlock_from_isr(
void);
  1562   void _dbg_check_enter_isr(
void);
  1563   void _dbg_check_leave_isr(
void);
  1564   void chDbgCheckClassI(
void);
  1565   void chDbgCheckClassS(
void);
 Port related template macros and structures. 
 
threads_queue_t semaphore_t
Type of a structure representing a semaphore. 
 
Structure representing a thread. 
 
uint64_t systime_t
Type of system time. 
 
uint64_t sysinterval_t
Type of time interval. 
 
msg_t chThdSuspendTimeoutS(thread_reference_t *trp, sysinterval_t timeout)
Sends the current thread sleeping and sets a reference variable. 
 
volatile cnt_t cnt
Threads Queue counter. 
 
ChibiOS/LIB main include file. 
 
msg_t chSemWaitTimeoutS(semaphore_t *sp, sysinterval_t timeout)
Performs a wait operation on a semaphore with timeout specification. 
 
void chSysPolledDelayX(rtcnt_t cycles)
Polled delay. 
 
thread_t * chSchReadyI(thread_t *tp)
Inserts a thread in the Ready List placing it behind its peers. 
 
void chThdDequeueAllI(threads_queue_t *tqp, msg_t msg)
Dequeues and wakes up all threads from the threads queue object. 
 
void chSemSignal(semaphore_t *sp)
Performs a signal operation on a semaphore. 
 
msg_t chThdEnqueueTimeoutS(threads_queue_t *tqp, sysinterval_t timeout)
Enqueues the caller thread on a threads queue object. 
 
thread_t * thread_reference_t
Type of a thread reference. 
 
void(* tfunc_t)(void *p)
Thread function. 
 
Platform dependent part of the thread_t structure. 
 
void chThdDoDequeueNextI(threads_queue_t *tqp, msg_t msg)
Dequeues and wakes up one thread from the threads queue object. 
 
Structure representing a thread static configuration. 
 
void chSysHalt(const char *reason)
Halts the system. 
 
#define CH_CFG_THREAD_EXT_FIELDS
Threads descriptor structure extension. 
 
void chEvtSignal(thread_t *tp, eventmask_t events)
Adds a set of event flags directly to the specified thread_t. 
 
void chSchRescheduleS(void)
Performs a reschedule if a higher priority thread is runnable. 
 
void chSemReset(semaphore_t *sp, cnt_t n)
Performs a reset operation on the semaphore. 
 
void chSysTimerHandlerI(void)
Handles time ticks for round robin preemption and timer increments. 
 
uint32_t sysinterval_t
Type of time interval. 
 
bool chSchIsPreemptionRequired(void)
Evaluates if preemption is required. 
 
void chSysUnconditionalLock(void)
Unconditionally enters the kernel lock state. 
 
void chEvtSignalI(thread_t *tp, eventmask_t events)
Adds a set of event flags directly to the specified thread_t. 
 
void chThdResumeI(thread_reference_t *trp, msg_t msg)
Wakes up a thread waiting on a thread reference object. 
 
msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout)
Puts the current thread to sleep into the specified state with timeout specification. 
 
#define CH_CFG_NUM_THREADS
Number of user threads in the application. 
 
void chSysInit(void)
ChibiOS/RT initialization. 
 
uint32_t systime_t
Type of system time. 
 
void chThdDequeueNextI(threads_queue_t *tqp, msg_t msg)
Dequeues and wakes up one thread from the threads queue object, if any. 
 
syssts_t chSysGetStatusAndLockX(void)
Returns the execution status and enters a critical zone. 
 
eventmask_t chEvtWaitAnyTimeout(eventmask_t events, sysinterval_t timeout)
Waits for any of the specified events. 
 
void chSysRestoreStatusX(syssts_t sts)
Restores the specified execution status and leaves a critical zone. 
 
bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end)
Realtime window test. 
 
void chThdResume(thread_reference_t *trp, msg_t msg)
Wakes up a thread waiting on a thread reference object. 
 
License Module macros and structures. 
 
uint64_t time_conv_t
Type of time conversion variable. 
 
msg_t chSemWaitTimeout(semaphore_t *sp, sysinterval_t timeout)
Performs a wait operation on a semaphore with timeout specification. 
 
void chThdSleep(sysinterval_t time)
Suspends the invoking thread for the specified time. 
 
uint64_t stkalign_t
Type of stack and memory alignment enforcement. 
 
void chSysUnconditionalUnlock(void)
Unconditionally leaves the kernel lock state. 
 
Structure representing a queue of threads. 
 
void chThdSleepUntil(systime_t time)
Suspends the invoking thread until the system time arrives to the specified value. 
 
void chSemSignalI(semaphore_t *sp)
Performs a signal operation on a semaphore. 
 
nil_system_t nil
System data structures. 
 
void chSemResetI(semaphore_t *sp, cnt_t n)
Performs a reset operation on the semaphore. 
 
void chSchDoReschedule(void)
Switches to the first thread on the runnable queue. 
 
Structure representing a thread.