ChibiOS  21.6.0
nil/include/ch.h File Reference

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_tthread_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_tnil_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_tchSchReadyI (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_tchThdCreateI (const thread_descriptor_t *tdp)
 Creates a new thread into a static memory area. More...
 
thread_tchThdCreate (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...
 

Detailed Description

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.