ChibiOS
21.6.0
|
Nil RTOS main header file. More...
#include "chtypes.h"
#include "chconf.h"
#include "chlicense.h"
#include "chcore.h"
#include "chsem.h"
#include "chevt.h"
#include "chmsg.h"
#include "chlib.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_descriptor |
Structure representing a thread descriptor. More... | |
struct | nil_thread |
Structure representing a thread. More... | |
struct | nil_os_instance |
System data structure. More... | |
Macros | |
#define | __CHIBIOS_NIL__ |
ChibiOS/NIL identification macro. More... | |
#define | CH_KERNEL_STABLE 0 |
Stable release flag. More... | |
#define | THD_IDLE_BASE (&__main_thread_stack_base__) |
#define | __CH_STRINGIFY(a) #a |
Utility to make the parameter a quoted string. More... | |
#define | THD_WORKING_AREA_END(wa) ((wa) + ((sizeof wa) / sizeof (stkalign_t))) |
Returns the top address of a working area. More... | |
ChibiOS/NIL version identification | |
#define | CH_KERNEL_VERSION "4.1.0" |
Kernel version string. More... | |
#define | CH_KERNEL_MAJOR 4 |
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... | |
Constants for configuration options | |
#define | FALSE 0 |
Generic 'false' preprocessor boolean constant. More... | |
#define | TRUE 1 |
Generic 'true' preprocessor boolean constant. 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_WTSTART (tstate_t)0 |
Thread not yet started or terminated. More... | |
#define | NIL_STATE_READY (tstate_t)1 |
Thread ready or executing. More... | |
#define | NIL_STATE_SLEEPING (tstate_t)2 |
Thread sleeping. More... | |
#define | NIL_STATE_SUSPENDED (tstate_t)3 |
Thread suspended. More... | |
#define | NIL_STATE_WTEXIT (tstate_t)4 |
Waiting a thread. More... | |
#define | NIL_STATE_WTQUEUE (tstate_t)5 |
On queue or semaph. More... | |
#define | NIL_STATE_WTOREVT (tstate_t)6 |
Waiting for events. More... | |
#define | NIL_STATE_WTANDEVT (tstate_t)7 |
Waiting for events. More... | |
#define | NIL_STATE_SNDMSGQ (tstate_t)8 |
Sending a message, in queue. More... | |
#define | NIL_STATE_WTMSG (tstate_t)10 |
Waiting for a message. More... | |
#define | NIL_STATE_FINAL (tstate_t)11 |
Thread terminated. More... | |
#define | NIL_THD_IS_WTSTART(tp) ((tp)->state == NIL_STATE_WTSTART) |
#define | NIL_THD_IS_READY(tp) ((tp)->state == NIL_STATE_READY) |
#define | NIL_THD_IS_SLEEPING(tp) ((tp)->state == NIL_STATE_SLEEPING) |
#define | NIL_THD_IS_SUSPENDED(tp) ((tp)->state == NIL_STATE_SUSPENDED) |
#define | NIL_THD_IS_WTEXIT(tp) ((tp)->state == NIL_STATE_WTEXIT) |
#define | NIL_THD_IS_WTQUEUE(tp) ((tp)->state == NIL_STATE_WTQUEUE) |
#define | NIL_THD_IS_WTOREVT(tp) ((tp)->state == NIL_STATE_WTOREVT) |
#define | NIL_THD_IS_WTANDEVT(tp) ((tp)->state == NIL_STATE_WTANDEVT) |
#define | NIL_THD_IS_SNDMSGQ(tp) ((tp)->state == NIL_STATE_SNDMSGQ) |
#define | NIL_THD_IS_WTMSG(tp) ((tp)->state == NIL_STATE_WTMSG) |
#define | NIL_THD_IS_FINAL(tp) ((tp)->state == NIL_STATE_FINAL) |
#define | CH_STATE_NAMES |
RT options not existing in NIL | |
#define | CH_CFG_USE_REGISTRY FALSE |
Threads tables definition macros | |
#define | THD_TABLE_BEGIN const thread_descriptor_t nil_thd_configs[] = { |
Start of user threads table. More... | |
#define | THD_TABLE_THREAD(_prio, _name, _wap, _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... | |
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 | chSchGoSleepS(newstate) chSchGoSleepTimeoutS(newstate, TIME_INFINITE) |
Puts the current thread to sleep into the specified state. More... | |
#define | chSchWakeupS(ntp, msg) |
Wakes up a thread. 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 | chThdGetPriorityX(void) (tprio_t)(nil.current - &nil.threads[0]) |
Returns the current thread priority. More... | |
#define | chThdResumeS(trp, msg) |
Wakes up a thread waiting on a thread reference object. 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 | chVTGetSystemTimeX() (nil.systime) |
Current system time. More... | |
#define | chVTTimeElapsedSinceX(start) chTimeDiffX((start), chVTGetSystemTimeX()) |
Returns the elapsed time since the specified start time. More... | |
#define | chVTIsSystemTimeWithinX(start, end) chTimeIsInRangeX(chVTGetSystemTimeX(), start, end) |
Checks if the current system time is within the specified time window. 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 | 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_os_instance | os_instance_t |
Type of a structure representing the system. More... | |
typedef void(* | tfunc_t) (void *p) |
Thread function. More... | |
typedef struct nil_thread_descriptor | thread_descriptor_t |
Type of a thread descriptor. More... | |
typedef struct nil_thread | thread_t |
Type of a structure representing a thread. More... | |
typedef thread_t * | thread_reference_t |
Type of a thread reference. 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... | |
Kernel types | |
typedef port_rtcnt_t | rtcnt_t |
typedef port_syssts_t | syssts_t |
typedef port_stkalign_t | stkalign_t |
typedef uint8_t | tstate_t |
typedef uint32_t | tprio_t |
typedef int32_t | msg_t |
typedef int32_t | eventid_t |
typedef uint32_t | eventmask_t |
typedef uint32_t | eventflags_t |
typedef int32_t | cnt_t |
typedef uint32_t | ucnt_t |
Functions | |
thread_t * | nil_find_thread (tstate_t state, void *p) |
Retrieves the highest priority thread in the specified state and associated to the specified object. More... | |
cnt_t | nil_ready_all (void *p, cnt_t cnt, msg_t msg) |
Puts in ready state all thread matching the specified status and associated object. More... | |
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 | chSchDoPreemption (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... | |
bool | chTimeIsInRangeX (systime_t time, systime_t start, systime_t end) |
Checks if the specified time is within the specified time range. More... | |
thread_t * | chThdCreateI (const thread_descriptor_t *tdp) |
Creates a new thread into a static memory area. More... | |
thread_t * | chThdCreate (const thread_descriptor_t *tdp) |
Creates a new thread into a static memory area. More... | |
void | chThdExit (msg_t msg) |
Terminates the current thread. 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... | |
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 nil/include/ch.h.