ChibiOS/NIL
3.1.0
|
Nil RTOS main header file. More...
#include "chtypes.h"
#include "chconf.h"
#include "chlicense.h"
#include "chcore.h"
#include "chmboxes.h"
#include "chmemcore.h"
#include "chheap.h"
#include "chmempools.h"
#include "chfifo.h"
#include "chfactory.h"
Go to the source code of this file.
Data Structures | |
struct | nil_threads_queue |
Structure representing a queue of threads. More... | |
struct | nil_thread_cfg |
Structure representing a thread static configuration. More... | |
struct | nil_thread |
Structure representing a thread. More... | |
struct | nil_system |
System data structure. More... | |
Macros | |
#define | _CHIBIOS_NIL_ |
ChibiOS/NIL identification macro. More... | |
#define | CH_KERNEL_STABLE 1 |
Stable release flag. More... | |
#define | CH_CFG_USE_FACTORY TRUE |
Objects Factory APIs. More... | |
#define | CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 |
Maximum length for object names. More... | |
#define | CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE |
Enables the registry of generic objects. More... | |
#define | CH_CFG_FACTORY_GENERIC_BUFFERS TRUE |
Enables factory for generic buffers. More... | |
#define | CH_CFG_FACTORY_SEMAPHORES TRUE |
Enables factory for semaphores. More... | |
#define | CH_CFG_FACTORY_MAILBOXES TRUE |
Enables factory for mailboxes. More... | |
#define | CH_CFG_FACTORY_OBJ_FIFOS TRUE |
Enables factory for objects FIFOs. More... | |
#define | THD_IDLE_BASE (&__main_thread_stack_base__) |
#define | __CH_STRINGIFY(a) #a |
Utility to make the parameter a quoted string. More... | |
ChibiOS/NIL version identification | |
#define | CH_KERNEL_VERSION "3.1.0" |
Kernel version string. More... | |
#define | CH_KERNEL_MAJOR 3 |
Kernel version major number. More... | |
#define | CH_KERNEL_MINOR 1 |
Kernel version minor number. More... | |
#define | CH_KERNEL_PATCH 0 |
Kernel version patch number. More... | |
Wakeup messages | |
#define | MSG_OK (msg_t)0 |
OK wakeup message. More... | |
#define | MSG_TIMEOUT (msg_t)-1 |
Wake-up caused by a timeout condition. More... | |
#define | MSG_RESET (msg_t)-2 |
Wake-up caused by a reset condition. More... | |
Special time constants | |
#define | TIME_IMMEDIATE ((sysinterval_t)-1) |
Zero time specification for some functions with a timeout specification. More... | |
#define | TIME_INFINITE ((sysinterval_t)0) |
Infinite time specification for all functions with a timeout specification. More... | |
#define | TIME_MAX_INTERVAL ((sysinterval_t)-2) |
Maximum interval constant usable as timeout. More... | |
#define | TIME_MAX_SYSTIME ((systime_t)-1) |
Maximum system of system time before it wraps. More... | |
Thread state related macros | |
#define | NIL_STATE_READY (tstate_t)0 |
Thread ready or executing. More... | |
#define | NIL_STATE_SLEEPING (tstate_t)1 |
Thread sleeping. More... | |
#define | NIL_STATE_SUSP (tstate_t)2 |
Thread suspended. More... | |
#define | NIL_STATE_WTQUEUE (tstate_t)3 |
On queue or semaph. More... | |
#define | NIL_STATE_WTOREVT (tstate_t)4 |
Waiting for events. More... | |
#define | NIL_THD_IS_READY(tr) ((tr)->state == NIL_STATE_READY) |
#define | NIL_THD_IS_SLEEPING(tr) ((tr)->state == NIL_STATE_SLEEPING) |
#define | NIL_THD_IS_SUSP(tr) ((tr)->state == NIL_STATE_SUSP) |
#define | NIL_THD_IS_WTQUEUE(tr) ((tr)->state == NIL_STATE_WTQUEUE) |
#define | NIL_THD_IS_WTOREVT(tr) ((tr)->state == NIL_STATE_WTOREVT) |
Events related macros | |
#define | ALL_EVENTS ((eventmask_t)-1) |
All events allowed mask. More... | |
#define | EVENT_MASK(eid) ((eventmask_t)(1 << (eid))) |
Returns an event mask from an event identifier. More... | |
Threads tables definition macros | |
#define | THD_TABLE_BEGIN const thread_config_t nil_thd_configs[CH_CFG_NUM_THREADS + 1] = { |
Start of user threads table. More... | |
#define | THD_TABLE_ENTRY(wap, name, funcp, arg) |
Entry of user threads table. More... | |
#define | THD_TABLE_END |
End of user threads table. More... | |
Memory alignment support macros | |
#define | MEM_ALIGN_MASK(a) ((size_t)(a) - 1U) |
Alignment mask constant. More... | |
#define | MEM_ALIGN_PREV(p, a) ((size_t)(p) & ~MEM_ALIGN_MASK(a)) |
Aligns to the previous aligned memory address. More... | |
#define | MEM_ALIGN_NEXT(p, a) |
Aligns to the new aligned memory address. More... | |
#define | MEM_IS_ALIGNED(p, a) (((size_t)(p) & MEM_ALIGN_MASK(a)) == 0U) |
Returns whatever a pointer or memory size is aligned. More... | |
#define | MEM_IS_VALID_ALIGNMENT(a) (((size_t)(a) != 0U) && (((size_t)(a) & ((size_t)(a) - 1U)) == 0U)) |
Returns whatever a constant is a valid alignment. More... | |
Working Areas | |
#define | THD_WORKING_AREA_SIZE(n) |
Calculates the total Working Area size. More... | |
#define | THD_WORKING_AREA(s, n) PORT_WORKING_AREA(s, n) |
Static working area allocation. More... | |
Threads abstraction macros | |
#define | THD_FUNCTION(tname, arg) PORT_THD_FUNCTION(tname, arg) |
Thread declaration macro. More... | |
ISRs abstraction macros | |
#define | CH_IRQ_IS_VALID_PRIORITY(prio) PORT_IRQ_IS_VALID_PRIORITY(prio) |
Priority level validation macro. More... | |
#define | CH_IRQ_IS_VALID_KERNEL_PRIORITY(prio) PORT_IRQ_IS_VALID_KERNEL_PRIORITY(prio) |
Priority level validation macro. More... | |
#define | CH_IRQ_PROLOGUE() |
IRQ handler enter code. More... | |
#define | CH_IRQ_EPILOGUE() |
IRQ handler exit code. More... | |
#define | CH_IRQ_HANDLER(id) PORT_IRQ_HANDLER(id) |
Standard normal IRQ handler declaration. More... | |
Fast ISRs abstraction macros | |
#define | CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id) |
Standard fast IRQ handler declaration. More... | |
Time conversion utilities | |
#define | TIME_S2I(secs) ((sysinterval_t)((time_conv_t)(secs) * (time_conv_t)CH_CFG_ST_FREQUENCY)) |
Seconds to time interval. More... | |
#define | TIME_MS2I(msecs) |
Milliseconds to time interval. More... | |
#define | TIME_US2I(usecs) |
Microseconds to time interval. More... | |
#define | TIME_I2S(interval) |
Time interval to seconds. More... | |
#define | TIME_I2MS(interval) |
Time interval to milliseconds. More... | |
#define | TIME_I2US(interval) |
Time interval to microseconds. More... | |
Threads queues | |
#define | _THREADS_QUEUE_DATA(name) {(cnt_t)0} |
Data part of a static threads queue object initializer. More... | |
#define | _THREADS_QUEUE_DECL(name) threads_queue_t name = _THREADS_QUEUE_DATA(name) |
Static threads queue object initializer. More... | |
Semaphores macros | |
#define | _SEMAPHORE_DATA(name, n) {n} |
Data part of a static semaphore initializer. More... | |
#define | SEMAPHORE_DECL(name, n) semaphore_t name = _SEMAPHORE_DATA(name, n) |
Static semaphore initializer. More... | |
Macro Functions | |
#define | chSysGetRealtimeCounterX() (rtcnt_t)port_rt_get_counter_value() |
Returns the current value of the system real time counter. More... | |
#define | chSysDisable() |
Raises the system interrupt priority mask to the maximum level. More... | |
#define | chSysSuspend() |
Raises the system interrupt priority mask to system level. More... | |
#define | chSysEnable() |
Lowers the system interrupt priority mask to user level. More... | |
#define | chSysLock() |
Enters the kernel lock state. More... | |
#define | chSysUnlock() |
Leaves the kernel lock state. More... | |
#define | chSysLockFromISR() |
Enters the kernel lock state from within an interrupt handler. More... | |
#define | chSysUnlockFromISR() |
Leaves the kernel lock state from within an interrupt handler. More... | |
#define | chSchIsRescRequiredI() ((bool)(nil.current != nil.next)) |
Evaluates if a reschedule is required. More... | |
#define | chThdGetSelfX() nil.current |
Returns a pointer to the current thread_t . More... | |
#define | chThdSleepSeconds(secs) chThdSleep(TIME_S2I(secs)) |
Delays the invoking thread for the specified number of seconds. More... | |
#define | chThdSleepMilliseconds(msecs) chThdSleep(TIME_MS2I(msecs)) |
Delays the invoking thread for the specified number of milliseconds. More... | |
#define | chThdSleepMicroseconds(usecs) chThdSleep(TIME_US2I(usecs)) |
Delays the invoking thread for the specified number of microseconds. More... | |
#define | chThdSleepS(timeout) (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, timeout) |
Suspends the invoking thread for the specified time. More... | |
#define | chThdSleepUntilS(abstime) |
Suspends the invoking thread until the system time arrives to the specified value. More... | |
#define | chThdQueueObjectInit(tqp) ((tqp)->cnt = (cnt_t)0) |
Initializes a threads queue object. More... | |
#define | chThdQueueIsEmptyI(tqp) ((bool)(tqp->cnt >= (cnt_t)0)) |
Evaluates to true if the specified queue is empty. More... | |
#define | chSemObjectInit(sp, n) ((sp)->cnt = n) |
Initializes a semaphore with the specified counter value. More... | |
#define | chSemWait(sp) chSemWaitTimeout(sp, TIME_INFINITE) |
Performs a wait operation on a semaphore. More... | |
#define | chSemWaitS(sp) chSemWaitTimeoutS(sp, TIME_INFINITE) |
Performs a wait operation on a semaphore. More... | |
#define | chSemFastWaitI(sp) ((sp)->cnt--) |
Decreases the semaphore counter. More... | |
#define | chSemFastSignalI(sp) ((sp)->cnt++) |
Increases the semaphore counter. More... | |
#define | chSemGetCounterI(sp) ((sp)->cnt) |
Returns the semaphore counter current value. More... | |
#define | chVTGetSystemTimeX() (nil.systime) |
Current system time. More... | |
#define | chVTTimeElapsedSinceX(start) chTimeDiffX((start), chVTGetSystemTimeX()) |
Returns the elapsed time since the specified start time. More... | |
#define | chTimeAddX(systime, interval) ((systime_t)(systime) + (systime_t)(interval)) |
Adds an interval to a system time returning a system time. More... | |
#define | chTimeDiffX(start, end) ((sysinterval_t)((systime_t)((systime_t)(end) - (systime_t)(start)))) |
Subtracts two system times returning an interval. More... | |
#define | chTimeIsInRangeX(time, start, end) |
Checks if the specified time is within the specified time range. More... | |
#define | chDbgCheck(c) |
Function parameters check. More... | |
#define | chDbgAssert(c, r) |
Condition assertion. More... | |
Typedefs | |
typedef uint32_t | systime_t |
Type of system time. More... | |
typedef uint32_t | sysinterval_t |
Type of time interval. More... | |
typedef uint64_t | time_conv_t |
Type of time conversion variable. More... | |
typedef struct nil_thread | thread_t |
Type of a structure representing a thread. More... | |
typedef struct nil_threads_queue | threads_queue_t |
Type of a queue of threads. More... | |
typedef threads_queue_t | semaphore_t |
Type of a structure representing a semaphore. More... | |
typedef void(* | tfunc_t) (void *p) |
Thread function. More... | |
typedef struct nil_thread_cfg | thread_config_t |
Type of a structure representing a thread static configuration. More... | |
typedef thread_t * | thread_reference_t |
Type of a thread reference. More... | |
typedef struct nil_system | nil_system_t |
Type of a structure representing the system. More... | |
Functions | |
void | chSysInit (void) |
Initializes the kernel. More... | |
void | chSysHalt (const char *reason) |
Halts the system. More... | |
void | chSysTimerHandlerI (void) |
Time management handler. More... | |
void | chSysUnconditionalLock (void) |
Unconditionally enters the kernel lock state. More... | |
void | chSysUnconditionalUnlock (void) |
Unconditionally leaves the kernel lock state. More... | |
syssts_t | chSysGetStatusAndLockX (void) |
Returns the execution status and enters a critical zone. More... | |
bool | chSysIsCounterWithinX (rtcnt_t cnt, rtcnt_t start, rtcnt_t end) |
Realtime window test. More... | |
void | chSysPolledDelayX (rtcnt_t cycles) |
Polled delay. More... | |
void | chSysRestoreStatusX (syssts_t sts) |
Restores the specified execution status and leaves a critical zone. More... | |
thread_t * | chSchReadyI (thread_t *tp, msg_t msg) |
Makes the specified thread ready for execution. More... | |
bool | chSchIsPreemptionRequired (void) |
Evaluates if preemption is required. More... | |
void | chSchDoReschedule (void) |
Switches to the first thread on the runnable queue. More... | |
void | chSchRescheduleS (void) |
Reschedules if needed. More... | |
msg_t | chSchGoSleepTimeoutS (tstate_t newstate, sysinterval_t timeout) |
Puts the current thread to sleep into the specified state with timeout specification. More... | |
msg_t | chThdSuspendTimeoutS (thread_reference_t *trp, sysinterval_t timeout) |
Sends the current thread sleeping and sets a reference variable. More... | |
void | chThdResumeI (thread_reference_t *trp, msg_t msg) |
Wakes up a thread waiting on a thread reference object. More... | |
void | chThdResume (thread_reference_t *trp, msg_t msg) |
Wakes up a thread waiting on a thread reference object. More... | |
void | chThdSleep (sysinterval_t timeout) |
Suspends the invoking thread for the specified time. More... | |
void | chThdSleepUntil (systime_t abstime) |
Suspends the invoking thread until the system time arrives to the specified value. More... | |
msg_t | chThdEnqueueTimeoutS (threads_queue_t *tqp, sysinterval_t timeout) |
Enqueues the caller thread on a threads queue object. More... | |
void | chThdDoDequeueNextI (threads_queue_t *tqp, msg_t msg) |
Dequeues and wakes up one thread from the threads queue object. More... | |
void | chThdDequeueNextI (threads_queue_t *tqp, msg_t msg) |
Dequeues and wakes up one thread from the threads queue object, if any. More... | |
void | chThdDequeueAllI (threads_queue_t *tqp, msg_t msg) |
Dequeues and wakes up all threads from the threads queue object. More... | |
msg_t | chSemWaitTimeout (semaphore_t *sp, sysinterval_t timeout) |
Performs a wait operation on a semaphore with timeout specification. More... | |
msg_t | chSemWaitTimeoutS (semaphore_t *sp, sysinterval_t timeout) |
Performs a wait operation on a semaphore with timeout specification. More... | |
void | chSemSignal (semaphore_t *sp) |
Performs a signal operation on a semaphore. More... | |
void | chSemSignalI (semaphore_t *sp) |
Performs a signal operation on a semaphore. More... | |
void | chSemReset (semaphore_t *sp, cnt_t n) |
Performs a reset operation on the semaphore. More... | |
void | chSemResetI (semaphore_t *sp, cnt_t n) |
Performs a reset operation on the semaphore. More... | |
void | chEvtSignal (thread_t *tp, eventmask_t mask) |
Adds a set of event flags directly to the specified thread_t . More... | |
void | chEvtSignalI (thread_t *tp, eventmask_t mask) |
Adds a set of event flags directly to the specified thread_t . More... | |
eventmask_t | chEvtWaitAnyTimeout (eventmask_t mask, sysinterval_t timeout) |
Waits for any of the specified events. More... | |
Nil RTOS main header file.
This header includes all the required kernel headers so it is the only header you usually need to include in your application.
Definition in file ch.h.