35 #include "chlicense.h" 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);
624 struct port_context ctx;
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 threads_queue_t semaphore_t
Type of a structure representing a semaphore.
Structure representing a thread.
void chSchRescheduleS(void)
Reschedules if needed.
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.
ChibiOS/LIB main include file.
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 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.
void(* tfunc_t)(void *p)
Thread function.
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.
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.
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().