49 #define CH_KERNEL_STABLE 1 58 #define CH_KERNEL_VERSION "3.1.0" 63 #define CH_KERNEL_MAJOR 3 68 #define CH_KERNEL_MINOR 1 73 #define CH_KERNEL_PATCH 0 80 #define MSG_OK (msg_t)0 81 #define MSG_TIMEOUT (msg_t)-1 83 #define MSG_RESET (msg_t)-2 97 #define TIME_IMMEDIATE ((sysinterval_t)-1) 103 #define TIME_INFINITE ((sysinterval_t)0) 108 #define TIME_MAX_INTERVAL ((sysinterval_t)-2) 113 #define TIME_MAX_SYSTIME ((systime_t)-1) 120 #define NIL_STATE_READY (tstate_t)0 122 #define NIL_STATE_SLEEPING (tstate_t)1 123 #define NIL_STATE_SUSP (tstate_t)2 124 #define NIL_STATE_WTQUEUE (tstate_t)3 125 #define NIL_STATE_WTOREVT (tstate_t)4 126 #define NIL_THD_IS_READY(tr) ((tr)->state == NIL_STATE_READY) 127 #define NIL_THD_IS_SLEEPING(tr) ((tr)->state == NIL_STATE_SLEEPING) 128 #define NIL_THD_IS_SUSP(tr) ((tr)->state == NIL_STATE_SUSP) 129 #define NIL_THD_IS_WTQUEUE(tr) ((tr)->state == NIL_STATE_WTQUEUE) 130 #define NIL_THD_IS_WTOREVT(tr) ((tr)->state == NIL_STATE_WTOREVT) 140 #define ALL_EVENTS ((eventmask_t)-1) 145 #define EVENT_MASK(eid) ((eventmask_t)(1 << (eid))) 157 #if !defined(CH_CFG_NUM_THREADS) || defined(__DOXYGEN__) 158 #define CH_CFG_NUM_THREADS 2 165 #if !defined(CH_CFG_ST_RESOLUTION) || defined(__DOXYGEN__) 166 #define CH_CFG_ST_RESOLUTION 32 175 #if !defined(CH_CFG_ST_FREQUENCY) || defined(__DOXYGEN__) 176 #define CH_CFG_ST_FREQUENCY 100 187 #if !defined(CH_CFG_ST_TIMEDELTA) || defined(__DOXYGEN__) 188 #define CH_CFG_ST_TIMEDELTA 0 197 #if !defined(CH_CFG_USE_SEMAPHORES) || defined(__DOXYGEN__) 198 #define CH_CFG_USE_SEMAPHORES TRUE 208 #if !defined(CH_CFG_USE_MUTEXES) || defined(__DOXYGEN__) 209 #define CH_CFG_USE_MUTEXES FALSE 218 #if !defined(CH_CFG_USE_EVENTS) || defined(__DOXYGEN__) 219 #define CH_CFG_USE_EVENTS TRUE 230 #if !defined(CH_CFG_USE_MAILBOXES) || defined(__DOXYGEN__) 231 #define CH_CFG_USE_MAILBOXES TRUE 241 #if !defined(CH_CFG_USE_MEMCORE) || defined(__DOXYGEN__) 242 #define CH_CFG_USE_MEMCORE TRUE 252 #if !defined(CH_CFG_USE_HEAP) || defined(__DOXYGEN__) 253 #define CH_CFG_USE_HEAP TRUE 263 #if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__) 264 #define CH_CFG_USE_MEMPOOLS TRUE 273 #if !defined(CH_CFG_USE_FACTORY) || defined(__DOXYGEN__) 274 #define CH_CFG_USE_FACTORY TRUE 282 #if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) || defined(__DOXYGEN__) 283 #define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 289 #if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) || defined(__DOXYGEN__) 290 #define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE 296 #if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) || defined(__DOXYGEN__) 297 #define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE 303 #if !defined(CH_CFG_FACTORY_SEMAPHORES) || defined(__DOXYGEN__) 304 #define CH_CFG_FACTORY_SEMAPHORES TRUE 310 #if !defined(CH_CFG_FACTORY_MAILBOXES) || defined(__DOXYGEN__) 311 #define CH_CFG_FACTORY_MAILBOXES TRUE 317 #if !defined(CH_CFG_FACTORY_OBJ_FIFOS) || defined(__DOXYGEN__) 318 #define CH_CFG_FACTORY_OBJ_FIFOS TRUE 327 #if !defined(CH_DBG_STATISTICS) || defined(__DOXYGEN__) 328 #define CH_DBG_STATISTICS FALSE 337 #if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__) 338 #define CH_DBG_SYSTEM_STATE_CHECK FALSE 346 #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) 347 #define CH_DBG_ENABLE_CHECKS FALSE 355 #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) 356 #define CH_DBG_ENABLE_ASSERTS FALSE 364 #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) 365 #define CH_DBG_ENABLE_STACK_CHECK FALSE 371 #if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__) 372 #define CH_CFG_SYSTEM_INIT_HOOK() {} 379 #if !defined(CH_CFG_THREAD_EXT_FIELDS) || defined(__DOXYGEN__) 380 #define CH_CFG_THREAD_EXT_FIELDS 386 #if !defined(CH_CFG_THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__) 387 #define CH_CFG_THREAD_EXT_INIT_HOOK(tr) {} 396 #if !defined(CH_CFG_IDLE_ENTER_HOOK) || defined(__DOXYGEN__) 397 #define CH_CFG_IDLE_ENTER_HOOK() {} 406 #if !defined(CH_CFG_IDLE_LEAVE_HOOK) || defined(__DOXYGEN__) 407 #define CH_CFG_IDLE_LEAVE_HOOK() {} 413 #if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__) 414 #define CH_CFG_SYSTEM_HALT_HOOK(reason) {} 421 #if CH_CUSTOMER_LIC_NIL == FALSE 422 #error "ChibiOS/NIL not licensed" 425 #if (CH_LICENSE_FEATURES != CH_FEATURES_FULL) && \ 426 (CH_LICENSE_FEATURES != CH_FEATURES_INTERMEDIATE) && \ 427 (CH_LICENSE_FEATURES == CH_FEATURES_BASIC) 428 #error "invalid CH_LICENSE_FEATURES setting" 432 #if (CH_LICENSE_FEATURES == CH_FEATURES_INTERMEDIATE) || \ 433 (CH_LICENSE_FEATURES == CH_FEATURES_BASIC) 436 #if CH_CFG_ST_FREQUENCY > 1000 437 #undef CH_CFG_ST_FREQUENCY 438 #define CH_CFG_ST_FREQUENCY 1000 442 #undef CH_CFG_USE_MAILBOXES 444 #define CH_CFG_USE_MAILBOXES FALSE 450 #if CH_LICENSE_FEATURES == CH_FEATURES_BASIC 453 #undef CH_CFG_ST_TIMEDELTA 454 #define CH_CFG_ST_TIMEDELTA 0 457 #undef CH_CFG_USE_MEMCORE 458 #undef CH_CFG_USE_MEMPOOLS 459 #undef CH_CFG_USE_HEAP 461 #define CH_CFG_USE_MEMCORE FALSE 462 #define CH_CFG_USE_MEMPOOLS FALSE 463 #define CH_CFG_USE_HEAP FALSE 467 #if !defined(_CHIBIOS_NIL_CONF_) 468 #error "missing or wrong configuration file" 471 #if !defined(_CHIBIOS_NIL_CONF_VER_3_0_) 472 #error "obsolete or unknown configuration file" 475 #if CH_CFG_NUM_THREADS < 1 476 #error "at least one thread must be defined" 479 #if CH_CFG_NUM_THREADS > 16 480 #error "ChibiOS/NIL is not recommended for thread-intensive applications," \ 481 "consider ChibiOS/RT instead" 484 #if (CH_CFG_ST_RESOLUTION != 16) && (CH_CFG_ST_RESOLUTION != 32) 485 #error "invalid CH_CFG_ST_RESOLUTION specified, must be 16 or 32" 488 #if CH_CFG_ST_FREQUENCY <= 0 489 #error "invalid CH_CFG_ST_FREQUENCY specified, must be greater than zero" 492 #if (CH_CFG_ST_TIMEDELTA < 0) || (CH_CFG_ST_TIMEDELTA == 1) 493 #error "invalid CH_CFG_ST_TIMEDELTA specified, must " \ 494 "be zero or greater than one" 497 #if CH_CFG_USE_MUTEXES == TRUE 498 #error "mutexes not yet supported" 501 #if CH_DBG_STATISTICS == TRUE 502 #error "statistics not yet supported" 505 #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) || \ 506 (CH_DBG_ENABLE_CHECKS == TRUE) || \ 507 (CH_DBG_ENABLE_ASSERTS == TRUE) || \ 508 (CH_DBG_ENABLE_STACK_CHECK == TRUE) 509 #define NIL_DBG_ENABLED TRUE 511 #define NIL_DBG_ENABLED FALSE 516 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__) 517 #define THD_IDLE_BASE (&__main_thread_stack_base__) 518 #define THD_IDLE_END (&__main_thread_stack_end__) 520 #define THD_IDLE_BASE NULL 521 #define THD_IDLE_END NULL 528 #if (CH_CFG_ST_RESOLUTION == 32) || defined(__DOXYGEN__) 574 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__) 586 typedef void (*
tfunc_t)(
void *p);
613 struct port_context ctx;
622 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__) 625 #if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__) 631 #if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__) 634 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__) 662 #if (CH_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__) 668 #if (CH_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__) 678 #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) || defined(__DOXYGEN__) 688 #if (NIL_DBG_ENABLED == TRUE) || defined(__DOXYGEN__) 696 const char *
volatile dbg_panic_msg;
708 #if CH_DBG_SYSTEM_STATE_CHECK == TRUE 709 #define _dbg_enter_lock() (nil.lock_cnt = (cnt_t)1) 710 #define _dbg_leave_lock() (nil.lock_cnt = (cnt_t)0) 716 #define __CH_STRINGIFY(a) #a 725 #define THD_TABLE_BEGIN \ 726 const thread_config_t nil_thd_configs[CH_CFG_NUM_THREADS + 1] = { 731 #define THD_TABLE_ENTRY(wap, name, funcp, arg) \ 732 {wap, ((stkalign_t *)(wap)) + (sizeof (wap) / sizeof(stkalign_t)), \ 738 #define THD_TABLE_END \ 739 {THD_IDLE_BASE, THD_IDLE_END, "idle", NULL, NULL} \ 751 #define MEM_ALIGN_MASK(a) ((size_t)(a) - 1U) 759 #define MEM_ALIGN_PREV(p, a) ((size_t)(p) & ~MEM_ALIGN_MASK(a)) 767 #define MEM_ALIGN_NEXT(p, a) MEM_ALIGN_PREV((size_t)(p) + \ 768 MEM_ALIGN_MASK(a), (a)) 776 #define MEM_IS_ALIGNED(p, a) (((size_t)(p) & MEM_ALIGN_MASK(a)) == 0U) 784 #define MEM_IS_VALID_ALIGNMENT(a) \ 785 (((size_t)(a) != 0U) && (((size_t)(a) & ((size_t)(a) - 1U)) == 0U)) 799 #define THD_WORKING_AREA_SIZE(n) MEM_ALIGN_NEXT(PORT_WA_SIZE(n), \ 812 #define THD_WORKING_AREA(s, n) PORT_WORKING_AREA(s, n) 823 #define THD_FUNCTION(tname, arg) PORT_THD_FUNCTION(tname, arg) 840 #if defined(PORT_IRQ_IS_VALID_PRIORITY) || defined(__DOXYGEN__) 841 #define CH_IRQ_IS_VALID_PRIORITY(prio) \ 842 PORT_IRQ_IS_VALID_PRIORITY(prio) 844 #define CH_IRQ_IS_VALID_PRIORITY(prio) false 858 #if defined(PORT_IRQ_IS_VALID_KERNEL_PRIORITY) || defined(__DOXYGEN__) 859 #define CH_IRQ_IS_VALID_KERNEL_PRIORITY(prio) \ 860 PORT_IRQ_IS_VALID_KERNEL_PRIORITY(prio) 862 #define CH_IRQ_IS_VALID_KERNEL_PRIORITY(prio) false 872 #define CH_IRQ_PROLOGUE() \ 873 PORT_IRQ_PROLOGUE(); \ 874 _dbg_check_enter_isr() 882 #define CH_IRQ_EPILOGUE() \ 883 _dbg_check_leave_isr(); \ 893 #define CH_IRQ_HANDLER(id) PORT_IRQ_HANDLER(id) 907 #define CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id) 927 #define TIME_S2I(secs) \ 928 ((sysinterval_t)((time_conv_t)(secs) * (time_conv_t)CH_CFG_ST_FREQUENCY)) 943 #define TIME_MS2I(msecs) \ 944 ((sysinterval_t)((((time_conv_t)(msecs) * \ 945 (time_conv_t)CH_CFG_ST_FREQUENCY) + \ 946 (time_conv_t)999) / (time_conv_t)1000)) 961 #define TIME_US2I(usecs) \ 962 ((sysinterval_t)((((time_conv_t)(usecs) * \ 963 (time_conv_t)CH_CFG_ST_FREQUENCY) + \ 964 (time_conv_t)999999) / (time_conv_t)1000000)) 979 #define TIME_I2S(interval) \ 980 (time_secs_t)(((time_conv_t)(interval) + \ 981 (time_conv_t)CH_CFG_ST_FREQUENCY - \ 982 (time_conv_t)1) / (time_conv_t)CH_CFG_ST_FREQUENCY) 997 #define TIME_I2MS(interval) \ 998 (time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000) + \ 999 (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \ 1000 (time_conv_t)CH_CFG_ST_FREQUENCY) 1015 #define TIME_I2US(interval) \ 1016 (time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \ 1017 (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \ 1018 (time_conv_t)CH_CFG_ST_FREQUENCY) 1031 #define _THREADS_QUEUE_DATA(name) {(cnt_t)0} 1040 #define _THREADS_QUEUE_DECL(name) \ 1041 threads_queue_t name = _THREADS_QUEUE_DATA(name) 1057 #define _SEMAPHORE_DATA(name, n) {n} 1068 #define SEMAPHORE_DECL(name, n) semaphore_t name = _SEMAPHORE_DATA(name, n) 1085 #if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__) 1086 #define chSysGetRealtimeCounterX() (rtcnt_t)port_rt_get_counter_value() 1097 #define chSysDisable() { \ 1099 _dbg_check_disable(); \ 1113 #define chSysSuspend() { \ 1115 _dbg_check_suspend(); \ 1127 #define chSysEnable() { \ 1128 _dbg_check_enable(); \ 1137 #define chSysLock() { \ 1139 _dbg_check_lock(); \ 1147 #define chSysUnlock() { \ 1148 _dbg_check_unlock(); \ 1164 #define chSysLockFromISR() { \ 1165 port_lock_from_isr(); \ 1166 _dbg_check_lock_from_isr(); \ 1182 #define chSysUnlockFromISR() { \ 1183 _dbg_check_unlock_from_isr(); \ 1184 port_unlock_from_isr(); \ 1196 #define chSchIsRescRequiredI() ((bool)(nil.current != nil.next)) 1203 #define chThdGetSelfX() nil.current 1215 #define chThdSleepSeconds(secs) chThdSleep(TIME_S2I(secs)) 1228 #define chThdSleepMilliseconds(msecs) chThdSleep(TIME_MS2I(msecs)) 1241 #define chThdSleepMicroseconds(usecs) chThdSleep(TIME_US2I(usecs)) 1250 #define chThdSleepS(timeout) \ 1251 (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, timeout) 1261 #define chThdSleepUntilS(abstime) \ 1262 (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, \ 1263 chTimeDiffX(chVTGetSystemTimeX(), (abstime))) 1272 #define chThdQueueObjectInit(tqp) ((tqp)->cnt = (cnt_t)0) 1284 #define chThdQueueIsEmptyI(tqp) ((bool)(tqp->cnt >= (cnt_t)0)) 1286 #if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__) 1296 #define chSemObjectInit(sp, n) ((sp)->cnt = n) 1310 #define chSemWait(sp) chSemWaitTimeout(sp, TIME_INFINITE) 1324 #define chSemWaitS(sp) chSemWaitTimeoutS(sp, TIME_INFINITE) 1334 #define chSemFastWaitI(sp) ((sp)->cnt--) 1345 #define chSemFastSignalI(sp) ((sp)->cnt++) 1352 #define chSemGetCounterI(sp) ((sp)->cnt) 1368 #if (CH_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__) 1369 #define chVTGetSystemTimeX() (nil.systime) 1371 #define chVTGetSystemTimeX() port_timer_get_time() 1382 #define chVTTimeElapsedSinceX(start) \ 1383 chTimeDiffX((start), chVTGetSystemTimeX()) 1394 #define chTimeAddX(systime, interval) \ 1395 ((systime_t)(systime) + (systime_t)(interval)) 1406 #define chTimeDiffX(start, end) \ 1407 ((sysinterval_t)((systime_t)((systime_t)(end) - (systime_t)(start)))) 1422 #define chTimeIsInRangeX(time, start, end) \ 1423 ((bool)((systime_t)((systime_t)(time) - (systime_t)(start)) < \ 1424 (systime_t)((systime_t)(end) - (systime_t)(start)))) 1436 #if !defined(chDbgCheck) 1437 #define chDbgCheck(c) do { \ 1439 if (CH_DBG_ENABLE_CHECKS != FALSE) { \ 1442 chSysHalt(__func__); \ 1462 #if !defined(chDbgAssert) 1463 #define chDbgAssert(c, r) do { \ 1465 if (CH_DBG_ENABLE_ASSERTS != FALSE) { \ 1468 chSysHalt(__func__); \ 1476 #if CH_DBG_SYSTEM_STATE_CHECK == FALSE 1477 #define _dbg_enter_lock() 1478 #define _dbg_leave_lock() 1479 #define _dbg_check_disable() 1480 #define _dbg_check_suspend() 1481 #define _dbg_check_enable() 1482 #define _dbg_check_lock() 1483 #define _dbg_check_unlock() 1484 #define _dbg_check_lock_from_isr() 1485 #define _dbg_check_unlock_from_isr() 1486 #define _dbg_check_enter_isr() 1487 #define _dbg_check_leave_isr() 1488 #define chDbgCheckClassI() 1489 #define chDbgCheckClassS() 1496 #if !defined(__DOXYGEN__) 1497 #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__) 1498 extern stkalign_t __main_thread_stack_base__, __main_thread_stack_end__;
1530 #if CH_CFG_USE_SEMAPHORES == TRUE 1538 #if CH_CFG_USE_EVENTS == TRUE 1543 #if CH_DBG_SYSTEM_STATE_CHECK == TRUE ChibiOS objects factory structures and macros.
threads_queue_t semaphore_t
Type of a structure representing a semaphore.
Structure representing a thread.
void chSchRescheduleS(void)
Reschedules if needed.
Heaps macros and structures.
void chEvtSignal(thread_t *tp, eventmask_t mask)
Adds a set of event flags directly to the specified thread_t.
msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout)
Puts the current thread to sleep into the specified state with timeout specification.
void chSysHalt(const char *reason)
Halts the system.
volatile cnt_t cnt
Threads Queue counter.
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.
Objects FIFO structures and macros.
msg_t chThdSuspendTimeoutS(thread_reference_t *trp, sysinterval_t timeout)
Sends the current thread sleeping and sets a reference variable.
void chThdResume(thread_reference_t *trp, msg_t msg)
Wakes up a thread waiting on a thread reference object.
void chEvtSignalI(thread_t *tp, eventmask_t mask)
Adds a set of event flags directly to the specified thread_t.
thread_t * thread_reference_t
Type of a thread reference.
Memory Pools macros and structures.
void(* tfunc_t)(void *p)
Thread function.
Core memory manager macros and structures.
void chThdResumeI(thread_reference_t *trp, msg_t msg)
Wakes up a thread waiting on a thread reference object.
void chSemSignalI(semaphore_t *sp)
Performs a signal operation on a semaphore.
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 chSysRestoreStatusX(syssts_t sts)
Restores the specified execution status and leaves a critical zone.
eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, sysinterval_t timeout)
Waits for any of the specified events.
void chDbgCheckClassS(void)
S-class functions context check.
#define CH_CFG_THREAD_EXT_FIELDS
Threads descriptor structure extension.
void chSemReset(semaphore_t *sp, cnt_t n)
Performs a reset operation on the semaphore.
void chSemResetI(semaphore_t *sp, cnt_t n)
Performs a reset operation on the semaphore.
void _dbg_check_suspend(void)
Guard code for chSysSuspend().
void chThdSleepUntil(systime_t abstime)
Suspends the invoking thread until the system time arrives to the specified value.
void chDbgCheckClassI(void)
I-class functions context check.
uint32_t sysinterval_t
Type of time interval.
void chThdSleep(sysinterval_t timeout)
Suspends the invoking thread for the specified time.
void chSysUnconditionalLock(void)
Unconditionally enters the kernel lock state.
msg_t chThdEnqueueTimeoutS(threads_queue_t *tqp, sysinterval_t timeout)
Enqueues the caller thread on a threads queue object.
Mailboxes macros and structures.
Configuration file template.
void chSysPolledDelayX(rtcnt_t cycles)
Polled delay.
void _dbg_check_lock(void)
Guard code for chSysLock().
#define CH_CFG_NUM_THREADS
Number of user threads in the application.
void chSysInit(void)
Initializes the kernel.
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.
License Module macros and structures.
uint64_t time_conv_t
Type of time conversion variable.
bool chSchIsPreemptionRequired(void)
Evaluates if preemption is required.
void chSysTimerHandlerI(void)
Time management handler.
void _dbg_check_lock_from_isr(void)
Guard code for chSysLockFromIsr().
void _dbg_check_unlock_from_isr(void)
Guard code for chSysUnlockFromIsr().
void _dbg_check_enable(void)
Guard code for chSysEnable().
bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end)
Realtime window test.
void chSysUnconditionalUnlock(void)
Unconditionally leaves the kernel lock state.
Structure representing a queue of threads.
thread_t * chSchReadyI(thread_t *tp, msg_t msg)
Makes the specified thread ready for execution.
void _dbg_check_leave_isr(void)
Guard code for CH_IRQ_EPILOGUE().
syssts_t chSysGetStatusAndLockX(void)
Returns the execution status and enters a critical zone.
void _dbg_check_enter_isr(void)
Guard code for CH_IRQ_PROLOGUE().
void chSchDoReschedule(void)
Switches to the first thread on the runnable queue.
msg_t chSemWaitTimeout(semaphore_t *sp, sysinterval_t timeout)
Performs a wait operation on a semaphore with timeout specification.
nil_system_t nil
System data structures.
msg_t chSemWaitTimeoutS(semaphore_t *sp, sysinterval_t timeout)
Performs a wait operation on a semaphore with timeout specification.
void _dbg_check_unlock(void)
Guard code for chSysUnlock().
void _dbg_check_disable(void)
Guard code for chSysDisable().