ChibiOS/NIL  3.1.0
ch.h File Reference

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_tthread_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_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 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...
 

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 ch.h.