/** * @mainpage ChibiOS/RT * @author Giovanni Di Sirio (gdisirio@users.sourceforge.net). * @section Chibi Chibi ? * It is the Japanese word for small as in small child. So ChibiOS/RT * \htmlonly (ちびOS/RT) \endhtmlonly * means small Real Time Operating System. * Source Wikipedia. * @section ch_features Features * */ /** * @defgroup Kernel Kernel * @{ */ /** @} */ /** * @defgroup Config Configuration * @{ * In \p chconf.h are defined the required subsystems for your application. * @ingroup Kernel * @file chconf.h ChibiOS/RT configuration file. */ /** @} */ /** * @defgroup Core Core * @{ * Non portable code. * @ingroup Kernel * @file chcore.c Non portable code. */ /** @} */ /** * @defgroup Initialization Initialization * @{ * Initialization APIs and procedures. * @ingroup Kernel * @file ch.h ChibiOS/RT main include file, it includes everything else. * @file chinit.c ChibiOS/RT Initialization code. */ /** @} */ /** * @defgroup Scheduler Scheduler * @{ * ChibiOS/RT scheduler. * @ingroup Kernel * @file chschd.c Scheduler code. * @file scheduler.h Scheduler macros and structures. */ /** @} */ /** * @defgroup Threads Threads * @{ * Threads creation and termination APIs. * @file threads.h Threads structures, macros and functions. * @file chthreads.c Threads code. */ /** @} */ /** * @defgroup VirtualTimers Virtual Timers * @{ * Virtual Timers APIs. * In order to use the Virtual Timers the \p CH_USE_VIRTUAL_TIMERS option * must be specified in \p chconf.h. * @file src/chdelta.c Virtual Timers code. * @file delta.h Virtual Timers macros and structures. */ /** @} */ /** * @defgroup Time Time * @{ * Time related APIs. * In order to use the Time APIs the \p CH_USE_SLEEP * option must be specified in \p chconf.h. * @file include/sleep.h Time macros and structures. * @file chsleep.c Time functions. */ /** @} */ /** * @defgroup Semaphores Semaphores * @{ * Semaphores and threads synchronization. * Operation mode

* A semaphore is a threads synchronization object, some operations * are defined on semaphores:
* * Semaphores are mainly used as guards for mutual exclusion code zones but * also have other uses, queues guards and counters as example.
* In order to use the Semaphores APIs the \p CH_USE_SEMAPHORES * option must be specified in \p chconf.h.

* Realtime Semaphores

* The RT Semaphores work exactly like normal semaphores except that the * thread gaining access to a mutex zone receives a priority boost, the * priority is increased by \p MEPRIO and becomes higher than any thread that * does not have the boost, note that all the boosted threads still keep their * relative priorities.
* Another difference is that the threads are queued by priority when trying * to acquire RT semaphores, normal semaphores use a FIFO strategy.
* The reason of this mechanism is to make the threads leave very critical * guarded zones in a predictable time. Use this mechanism if your application * has very strong realtime requirements.
* In order to use the RT Semaphores APIs the \p CH_USE_RT_SEMAPHORES * option must be specified in \p chconf.h.
* This mechanism is experimental. * @file semaphores.h Semaphores macros and structures. * @file chsem.c Semaphores code. */ /** @} */ /** * @defgroup Events Events * @{ * Event Sources and Event Listeners.
* Operation mode

* An Event Source is a special object that can be signaled by a thread or * an interrupt service routine. Signaling an Event Source has the effect * that all the threads registered on the Event Source will receive * and serve the event.
* An unlimited number of Event Sources can exists in a system and each * thread can listen on an unlimited number of them.
* Note that the events can be asynchronously generated but are synchronously * served, a thread can serve event by calling the \p chEvtWait() * API. If an event is generated while a listening thread is not ready to * serve it then the event becomes "pending" and will be served as soon the * thread invokes the \p chEvtWait().
* In order to use the Event APIs the \p CH_USE_EVENTS option must be * specified in \p chconf.h. * @file events.h Events macros and structures. * @file chevents.c Events functions. */ /** @} */ /** * @defgroup Messages Messages * @{ * Synchronous Messages.
* Operation Mode

* Messages are an easy to use and fast IPC mechanism, threads can both serve * messages and send messages to other threads, the mechanism allows data to * be carryed in both directions. Data is not copyed between the client and * server threads but just a pointer passed so the exchange is very time * efficient.
* Messages are always processed in FIFO order.
* Threads do not need to allocate space for message queues, the mechanism * just requires two extra pointers in the \p Thread structure (the message * queue header).
* In order to use the Messages APIs the \p CH_USE_MESSAGES option must be * specified in \p chconf.h. * @file messages.h Messages macros and structures. * @file chmsg.c Messages functions. */ /** @} */ /** * @defgroup IOQueues I/O Queues * @{ * ChibiOS/RT supports several kinds of queues. The queues are mostly used * in serial-like device drivers. The device drivers are usually designed to * have a lower side (lower driver, it is usually an interrupt service * routine) and an upper side (upper driver, accessed by the application * threads).
* There are several kind of queues:
* * In order to use the I/O queues the \p CH_USE_QUEUES option must * be specified in \p chconf.h.
* In order to use the half duplex queues the \p CH_USE_QUEUES_HALFDUPLEX * option must be specified in \p chconf.h. * @file queues.h I/O Queues macros and structures. * @file chqueues.c I/O Queues code. */ /** @} */ /** * @defgroup Serial Serial Drivers * @{ * This module implements a generic full duplex serial driver and a generic * half duplex serial driver. It uses the I/O Queues for communication between * the upper and the lower driver and events to notify the application about * incoming data, outcoming data and other I/O events. * The module also contains functions that make the implementation of the * interrupt service routines much easier.
* In order to use the serial full duplex driver the * \p CH_USE_SERIAL_FULLDUPLEX option must be specified in \p chconf.h.
* In order to use the serial half duplex driver the * \p CH_USE_SERIAL_HALFDUPLEX option must be specified in \p chconf.h. * @file serial.h Serial Drivers macros and structures. * @file chserial.c Serial Drivers code. */ /** @} */