git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1222 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2009-10-16 17:50:53 +00:00
parent 2c46df1916
commit b8654b471d
4 changed files with 680 additions and 332 deletions

View File

@ -18,9 +18,9 @@
*/ */
/** /**
* @file src/templates/chconf.h * @file templates/chconf.h
* @brief Configuration file template. * @brief Configuration file template.
* @addtogroup Config * @addtogroup config
* @{ * @{
*/ */
@ -32,29 +32,36 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Frequency of the system timer that drives the system ticks. This also * @brief System tick frequency.
* defines the system tick time unit. * @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/ */
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) #if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif #endif
/** /**
* This constant is the number of system ticks allowed for the threads before * @brief Round robin interval.
* preemption occurs. This option is only meaningful if the option * @details This constant is the number of system ticks allowed for the
* @p CH_USE_ROUNDROBIN is also active. * threads before preemption occurs. Setting this value to zero
* disables the round robin mechanism.
*
* @note Disabling round robin makes the kernel more compact and generally
* faster but forbids multiple threads at the same priority level.
*/ */
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif #endif
/** /**
* If enabled then the use of nested @p chSysLock() / @p chSysUnlock() * @brief Nested locks.
* operations is allowed.<br> * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is to leave * operations is allowed.<br>
* this option disabled.<br> * For performance and code size reasons the recommended setting
* You can use this option if you need to merge ChibiOS/RT with external * is to leave this option disabled.<br>
* libraries that require nested lock/unlock operations. * You may use this option if you need to merge ChibiOS/RT with
* external libraries that require nested lock/unlock operations.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) #if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
@ -62,23 +69,18 @@
#endif #endif
/** /**
* If specified then the kernel performs the round robin scheduling algorithm * @brief Managed RAM size.
* on threads of equal priority. * @details Size of the RAM area to be managed by the OS. If set to zero
* @note The default is @p TRUE. * then the whole available RAM is used. The core memory is made
*/ * available to the heap allocator and/or can be used directly through
#if !defined(CH_USE_ROUNDROBIN) || defined(__DOXYGEN__) * the simplified core memory allocator.
#define CH_USE_ROUNDROBIN TRUE *
#endif * @note In order to let the OS manage the whole RAM the linker script must
/**
* Number of RAM bytes to use as system heap. If set to zero then the whole
* available RAM is used as system heap.
* @note In order to use the whole RAM as system heap the linker script must
* provide the @p __heap_base__ and @p __heap_end__ symbols. * provide the @p __heap_base__ and @p __heap_end__ symbols.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_COREMEM.
*/ */
#if !defined(CH_HEAP_SIZE) || defined(__DOXYGEN__) #if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
#define CH_HEAP_SIZE 0 #define CH_MEMCORE_SIZE 0
#endif #endif
/*===========================================================================*/ /*===========================================================================*/
@ -86,8 +88,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then time efficient rather than space efficient code is used * @brief OS optimization.
* when two possible implementations exist. * @details If enabled then time efficient rather than space efficient code
* is used when two possible implementations exist.
*
* @note This is not related to the compiler optimization options. * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
@ -96,18 +100,20 @@
#endif #endif
/** /**
* If enabled defines a CPU register to be used as storage for the global * @brief Exotic optimization.
* @p currp variable. Caching this variable in a register can greatly * @details If defined then a CPU register is used as storage for the global
* improve both space and time efficiency of the generated code. Another side * @p currp variable. Caching this variable in a register greatly
* effect is that one less register has to be saved during the context switch * improves both space and time OS efficiency. A side effect is that
* resulting in lower RAM usage and faster code. * one less register has to be saved during the context switch
* resulting in lower RAM usage and faster context switch.
*
* @note This option is only usable with the GCC compiler and is only useful * @note This option is only usable with the GCC compiler and is only useful
* on processors with many registers like ARM cores. * on processors with many registers like ARM cores.
* @note If this option is enabled then ALL the libraries linked to the * @note If this option is enabled then ALL the libraries linked to the
* ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p * ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p
* -ffixed-@<reg@>. * -ffixed-@<reg@>.
* @note This option must be enabled in the Makefile, it is listed here for * @note This option must be enabled in the Makefile, it is listed here for
* documentation. * documentation only.
*/ */
#if defined(__DOXYGEN__) #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg" #define CH_CURRP_REGISTER_CACHE "reg"
@ -118,7 +124,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then the @p chThdWait() function is included in the kernel. * @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) #if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
@ -126,7 +135,9 @@
#endif #endif
/** /**
* If specified then the Semaphores APIs are included in the kernel. * @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) #if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
@ -134,8 +145,10 @@
#endif #endif
/** /**
* If enabled then the threads are enqueued on semaphores by priority rather * @brief Semaphores queuing mode.
* than FIFO order. * @details If enabled then the threads are enqueued on semaphores by
* priority rather than in FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -144,8 +157,10 @@
#endif #endif
/** /**
* If specified then the Semaphores the @p chSemWaitSignal() API is included * @brief Atomic semaphore API.
* in the kernel. * @details If enabled then the semaphores the @p chSemWaitSignal() API
* is included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -154,7 +169,9 @@
#endif #endif
/** /**
* If specified then the Mutexes APIs are included in the kernel. * @brief Mutexes APIs.
* @details If enabled then the mutexes APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
@ -162,7 +179,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs.
* @details If enabled then the conditional variables APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES. * @note Requires @p CH_USE_MUTEXES.
*/ */
@ -171,7 +191,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs with timeout.
* @details If enabled then the conditional variables APIs with timeout
* specification are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS. * @note Requires @p CH_USE_CONDVARS.
*/ */
@ -180,7 +203,9 @@
#endif #endif
/** /**
* If specified then the Event flags APIs are included in the kernel. * @brief Events Flags APIs.
* @details If enabled then the event flags APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) #if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
@ -188,8 +213,10 @@
#endif #endif
/** /**
* If specified then the @p chEvtWaitXXXTimeout() functions are included in * @brief Events Flags APIs with timeout.
* the kernel. * @details If enabled then the events APIs with timeout specification
* are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS. * @note Requires @p CH_USE_EVENTS.
*/ */
@ -198,7 +225,10 @@
#endif #endif
/** /**
* If specified then the Synchronous Messages APIs are included in the kernel. * @brief Synchronous Messages APIs.
* @details If enabled then the synchronous messages APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) #if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
@ -206,7 +236,10 @@
#endif #endif
/** /**
* If enabled then messages are served by priority rather than in FIFO order. * @brief Synchronous Messages queuing mode.
* @details If enabled then messages are served by priority rather than in
* FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_MESSAGES. * @note Requires @p CH_USE_MESSAGES.
*/ */
@ -215,16 +248,21 @@
#endif #endif
/** /**
* If specified then the Asynchronous Messages (Mailboxes) APIs are included * @brief Mailboxes APIs.
* in the kernel. * @details If enabled then the asynchronous messages (mailboxes) APIs are
* included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/ */
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
#define CH_USE_MAILBOXES TRUE #define CH_USE_MAILBOXES TRUE
#endif #endif
/** /**
* If specified then the I/O queues APIs are included in the kernel. * @brief I/O Queues APIs.
* @details If enabled then the I/O queues APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -233,9 +271,24 @@
#endif #endif
/** /**
* If specified then the memory heap allocator APIs are included in the kernel. * @brief Core Memory Manager APIs.
* @details If enabled then the core memory manager APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES. */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MEMCORE TRUE
#endif
/**
* @brief Heap Allocator APIs.
* @details If enabled then the memory heap allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE.
* @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
* @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended. * @note Mutexes are recommended.
*/ */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
@ -243,18 +296,24 @@
#endif #endif
/** /**
* If enabled enforces the use of the C-runtime @p malloc() and @p free() * @brief C-runtime allocator.
* functions as backend for the system heap allocator. * @details If enabled the the heap allocator APIs just wrap the C-runtime
* @p malloc() and @p free() functions.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_HEAP.
* @note The C-runtime may or may not require @p CH_USE_COREMEM, see the
* appropriate documentation.
*/ */
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MALLOC_HEAP FALSE #define CH_USE_MALLOC_HEAP FALSE
#endif #endif
/** /**
* If specified then the memory pools allocator APIs are included in the * @brief Memory Pools Allocator APIs.
* kernel. * @details If enabled then the memory pools allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) #if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
@ -262,8 +321,10 @@
#endif #endif
/** /**
* If specified then the dynamic threads creation APIs are included in the * @brief Dynamic Threads APIs.
* kernel. * @details If enabled then the dynamic threads creation APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT. * @note Requires @p CH_USE_WAITEXIT.
*/ */
@ -276,8 +337,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Debug option, if enabled then the checks on the API functions input * @brief Debug option, parameters checks.
* parameters are activated. * @details If enabled then the checks on the API functions input
* parameters are activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
@ -285,9 +348,11 @@
#endif #endif
/** /**
* Debug option, if enabled then all the assertions in the kernel code are * @brief Debug option, consistency checks.
* activated. This includes consistency checks inside the kernel, runtime * @details If enabled then all the assertions in the kernel code are
* anomalies and port-defined checks. * activated. This includes consistency checks inside the kernel,
* runtime anomalies and port-defined checks.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
@ -295,8 +360,10 @@
#endif #endif
/** /**
* Debug option, if enabled the context switch circular trace buffer is * @brief Debug option, trace buffer.
* activated. * @details If enabled then the context switch circular trace buffer is
* activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
@ -304,25 +371,37 @@
#endif #endif
/** /**
* Debug option, if enabled a runtime stack check is performed. * @brief Debug option, stack checks.
* @details If enabled then a runtime stack check is performed.
*
* @note The default is @p FALSE.
* @note The stack check is performed in a architecture/port dependent way. It * @note The stack check is performed in a architecture/port dependent way. It
* may not be implemented at all. * may not be implemented or some ports.
*/ */
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE #define CH_DBG_ENABLE_STACK_CHECK FALSE
#endif #endif
/** /**
* Debug option, if enabled the threads working area is filled with a byte * @brief Debug option, stacks initialization.
* pattern when a thread is created. * @details If enabled then the threads working area is filled with a byte
* value when a thread is created. This can be useful for the
* runtime measurement of the used stack.
*
* @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
#define CH_DBG_FILL_THREADS FALSE #define CH_DBG_FILL_THREADS FALSE
#endif #endif
/** /**
* Debug option, if enabled a field is added to the @p Thread structure that * @brief Debug option, threads profiling.
* counts the system ticks occurred while executing the thread. * @details If enabled then a field is added to the @p Thread structure that
* counts the system ticks occurred while executing the thread.
*
* @note The default is @p TRUE.
* @note This debug option is defaulted to TRUE because it is required by
* some test cases into the test suite.
*/ */
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
#define CH_DBG_THREADS_PROFILING TRUE #define CH_DBG_THREADS_PROFILING TRUE
@ -333,38 +412,46 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* User fields added to the end of the @p Thread structure. * @brief Threads descriptor structure hook.
* @details User fields added to the end of the @p Thread structure.
*/ */
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add threads custom fields here.*/ \
}; };
#endif #endif
/** /**
* User initialization code added to the @p chThdInit() API. * @brief Threads initialization hook.
* @note It is invoked from within @p chThdInit(). * @details User initialization code added to the @p chThdInit() API.
*
* @note It is invoked from within @p chThdInit() and implicitily from all
* the threads creation APIs.
*/ */
#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add threads initialization code here.*/ \
} }
#endif #endif
/** /**
* User finalization code added to the @p chThdExit() API. * @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*
* @note It is inserted into lock zone. * @note It is inserted into lock zone.
* @note It is also invoked when the threads simply return in order to
* terminate.
*/ */
#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add threads finalization code here.*/ \
} }
#endif #endif
/** /**
* Code inserted inside the idle thread loop immediately after an interrupt * @brief Idle Loop hook.
* resumed execution. * @details This hook is continuously invoked by the idle thread loop.
*/ */
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) #if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
#define IDLE_LOOP_HOOK() { \ #define IDLE_LOOP_HOOK() { \

View File

@ -18,9 +18,9 @@
*/ */
/** /**
* @file src/templates/chconf.h * @file templates/chconf.h
* @brief Configuration file template. * @brief Configuration file template.
* @addtogroup Config * @addtogroup config
* @{ * @{
*/ */
@ -32,29 +32,36 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Frequency of the system timer that drives the system ticks. This also * @brief System tick frequency.
* defines the system tick time unit. * @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/ */
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) #if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif #endif
/** /**
* This constant is the number of system ticks allowed for the threads before * @brief Round robin interval.
* preemption occurs. This option is only meaningful if the option * @details This constant is the number of system ticks allowed for the
* @p CH_USE_ROUNDROBIN is also active. * threads before preemption occurs. Setting this value to zero
* disables the round robin mechanism.
*
* @note Disabling round robin makes the kernel more compact and generally
* faster but forbids multiple threads at the same priority level.
*/ */
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif #endif
/** /**
* If enabled then the use of nested @p chSysLock() / @p chSysUnlock() * @brief Nested locks.
* operations is allowed.<br> * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is to leave * operations is allowed.<br>
* this option disabled.<br> * For performance and code size reasons the recommended setting
* You can use this option if you need to merge ChibiOS/RT with external * is to leave this option disabled.<br>
* libraries that require nested lock/unlock operations. * You may use this option if you need to merge ChibiOS/RT with
* external libraries that require nested lock/unlock operations.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) #if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
@ -62,23 +69,18 @@
#endif #endif
/** /**
* If specified then the kernel performs the round robin scheduling algorithm * @brief Managed RAM size.
* on threads of equal priority. * @details Size of the RAM area to be managed by the OS. If set to zero
* @note The default is @p TRUE. * then the whole available RAM is used. The core memory is made
*/ * available to the heap allocator and/or can be used directly through
#if !defined(CH_USE_ROUNDROBIN) || defined(__DOXYGEN__) * the simplified core memory allocator.
#define CH_USE_ROUNDROBIN TRUE *
#endif * @note In order to let the OS manage the whole RAM the linker script must
/**
* Number of RAM bytes to use as system heap. If set to zero then the whole
* available RAM is used as system heap.
* @note In order to use the whole RAM as system heap the linker script must
* provide the @p __heap_base__ and @p __heap_end__ symbols. * provide the @p __heap_base__ and @p __heap_end__ symbols.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_COREMEM.
*/ */
#if !defined(CH_HEAP_SIZE) || defined(__DOXYGEN__) #if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
#define CH_HEAP_SIZE 0 #define CH_MEMCORE_SIZE 0
#endif #endif
/*===========================================================================*/ /*===========================================================================*/
@ -86,8 +88,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then time efficient rather than space efficient code is used * @brief OS optimization.
* when two possible implementations exist. * @details If enabled then time efficient rather than space efficient code
* is used when two possible implementations exist.
*
* @note This is not related to the compiler optimization options. * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
@ -96,18 +100,20 @@
#endif #endif
/** /**
* If enabled defines a CPU register to be used as storage for the global * @brief Exotic optimization.
* @p currp variable. Caching this variable in a register can greatly * @details If defined then a CPU register is used as storage for the global
* improve both space and time efficiency of the generated code. Another side * @p currp variable. Caching this variable in a register greatly
* effect is that one less register has to be saved during the context switch * improves both space and time OS efficiency. A side effect is that
* resulting in lower RAM usage and faster code. * one less register has to be saved during the context switch
* resulting in lower RAM usage and faster context switch.
*
* @note This option is only usable with the GCC compiler and is only useful * @note This option is only usable with the GCC compiler and is only useful
* on processors with many registers like ARM cores. * on processors with many registers like ARM cores.
* @note If this option is enabled then ALL the libraries linked to the * @note If this option is enabled then ALL the libraries linked to the
* ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p * ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p
* -ffixed-@<reg@>. * -ffixed-@<reg@>.
* @note This option must be enabled in the Makefile, it is listed here for * @note This option must be enabled in the Makefile, it is listed here for
* documentation. * documentation only.
*/ */
#if defined(__DOXYGEN__) #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg" #define CH_CURRP_REGISTER_CACHE "reg"
@ -118,7 +124,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then the @p chThdWait() function is included in the kernel. * @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) #if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
@ -126,7 +135,9 @@
#endif #endif
/** /**
* If specified then the Semaphores APIs are included in the kernel. * @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) #if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
@ -134,8 +145,10 @@
#endif #endif
/** /**
* If enabled then the threads are enqueued on semaphores by priority rather * @brief Semaphores queuing mode.
* than FIFO order. * @details If enabled then the threads are enqueued on semaphores by
* priority rather than in FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -144,8 +157,10 @@
#endif #endif
/** /**
* If specified then the Semaphores the @p chSemWaitSignal() API is included * @brief Atomic semaphore API.
* in the kernel. * @details If enabled then the semaphores the @p chSemWaitSignal() API
* is included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -154,7 +169,9 @@
#endif #endif
/** /**
* If specified then the Mutexes APIs are included in the kernel. * @brief Mutexes APIs.
* @details If enabled then the mutexes APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
@ -162,7 +179,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs.
* @details If enabled then the conditional variables APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES. * @note Requires @p CH_USE_MUTEXES.
*/ */
@ -171,7 +191,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs with timeout.
* @details If enabled then the conditional variables APIs with timeout
* specification are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS. * @note Requires @p CH_USE_CONDVARS.
*/ */
@ -180,7 +203,9 @@
#endif #endif
/** /**
* If specified then the Event flags APIs are included in the kernel. * @brief Events Flags APIs.
* @details If enabled then the event flags APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) #if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
@ -188,8 +213,10 @@
#endif #endif
/** /**
* If specified then the @p chEvtWaitXXXTimeout() functions are included in * @brief Events Flags APIs with timeout.
* the kernel. * @details If enabled then the events APIs with timeout specification
* are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS. * @note Requires @p CH_USE_EVENTS.
*/ */
@ -198,7 +225,10 @@
#endif #endif
/** /**
* If specified then the Synchronous Messages APIs are included in the kernel. * @brief Synchronous Messages APIs.
* @details If enabled then the synchronous messages APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) #if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
@ -206,7 +236,10 @@
#endif #endif
/** /**
* If enabled then messages are served by priority rather than in FIFO order. * @brief Synchronous Messages queuing mode.
* @details If enabled then messages are served by priority rather than in
* FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_MESSAGES. * @note Requires @p CH_USE_MESSAGES.
*/ */
@ -215,16 +248,21 @@
#endif #endif
/** /**
* If specified then the Asynchronous Messages (Mailboxes) APIs are included * @brief Mailboxes APIs.
* in the kernel. * @details If enabled then the asynchronous messages (mailboxes) APIs are
* included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/ */
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
#define CH_USE_MAILBOXES TRUE #define CH_USE_MAILBOXES TRUE
#endif #endif
/** /**
* If specified then the I/O queues APIs are included in the kernel. * @brief I/O Queues APIs.
* @details If enabled then the I/O queues APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -233,9 +271,24 @@
#endif #endif
/** /**
* If specified then the memory heap allocator APIs are included in the kernel. * @brief Core Memory Manager APIs.
* @details If enabled then the core memory manager APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES. */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MEMCORE TRUE
#endif
/**
* @brief Heap Allocator APIs.
* @details If enabled then the memory heap allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE.
* @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
* @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended. * @note Mutexes are recommended.
*/ */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
@ -243,18 +296,24 @@
#endif #endif
/** /**
* If enabled enforces the use of the C-runtime @p malloc() and @p free() * @brief C-runtime allocator.
* functions as backend for the system heap allocator. * @details If enabled the the heap allocator APIs just wrap the C-runtime
* @p malloc() and @p free() functions.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_HEAP.
* @note The C-runtime may or may not require @p CH_USE_COREMEM, see the
* appropriate documentation.
*/ */
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MALLOC_HEAP FALSE #define CH_USE_MALLOC_HEAP FALSE
#endif #endif
/** /**
* If specified then the memory pools allocator APIs are included in the * @brief Memory Pools Allocator APIs.
* kernel. * @details If enabled then the memory pools allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) #if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
@ -262,8 +321,10 @@
#endif #endif
/** /**
* If specified then the dynamic threads creation APIs are included in the * @brief Dynamic Threads APIs.
* kernel. * @details If enabled then the dynamic threads creation APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT. * @note Requires @p CH_USE_WAITEXIT.
*/ */
@ -276,8 +337,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Debug option, if enabled then the checks on the API functions input * @brief Debug option, parameters checks.
* parameters are activated. * @details If enabled then the checks on the API functions input
* parameters are activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
@ -285,9 +348,11 @@
#endif #endif
/** /**
* Debug option, if enabled then all the assertions in the kernel code are * @brief Debug option, consistency checks.
* activated. This includes consistency checks inside the kernel, runtime * @details If enabled then all the assertions in the kernel code are
* anomalies and port-defined checks. * activated. This includes consistency checks inside the kernel,
* runtime anomalies and port-defined checks.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
@ -295,8 +360,10 @@
#endif #endif
/** /**
* Debug option, if enabled the context switch circular trace buffer is * @brief Debug option, trace buffer.
* activated. * @details If enabled then the context switch circular trace buffer is
* activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
@ -304,25 +371,37 @@
#endif #endif
/** /**
* Debug option, if enabled a runtime stack check is performed. * @brief Debug option, stack checks.
* @details If enabled then a runtime stack check is performed.
*
* @note The default is @p FALSE.
* @note The stack check is performed in a architecture/port dependent way. It * @note The stack check is performed in a architecture/port dependent way. It
* may not be implemented at all. * may not be implemented or some ports.
*/ */
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE #define CH_DBG_ENABLE_STACK_CHECK FALSE
#endif #endif
/** /**
* Debug option, if enabled the threads working area is filled with a byte * @brief Debug option, stacks initialization.
* pattern when a thread is created. * @details If enabled then the threads working area is filled with a byte
* value when a thread is created. This can be useful for the
* runtime measurement of the used stack.
*
* @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
#define CH_DBG_FILL_THREADS FALSE #define CH_DBG_FILL_THREADS FALSE
#endif #endif
/** /**
* Debug option, if enabled a field is added to the @p Thread structure that * @brief Debug option, threads profiling.
* counts the system ticks occurred while executing the thread. * @details If enabled then a field is added to the @p Thread structure that
* counts the system ticks occurred while executing the thread.
*
* @note The default is @p TRUE.
* @note This debug option is defaulted to TRUE because it is required by
* some test cases into the test suite.
*/ */
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
#define CH_DBG_THREADS_PROFILING TRUE #define CH_DBG_THREADS_PROFILING TRUE
@ -333,38 +412,46 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* User fields added to the end of the @p Thread structure. * @brief Threads descriptor structure hook.
* @details User fields added to the end of the @p Thread structure.
*/ */
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add threads custom fields here.*/ \
}; };
#endif #endif
/** /**
* User initialization code added to the @p chThdInit() API. * @brief Threads initialization hook.
* @note It is invoked from within @p chThdInit(). * @details User initialization code added to the @p chThdInit() API.
*
* @note It is invoked from within @p chThdInit() and implicitily from all
* the threads creation APIs.
*/ */
#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add threads initialization code here.*/ \
} }
#endif #endif
/** /**
* User finalization code added to the @p chThdExit() API. * @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*
* @note It is inserted into lock zone. * @note It is inserted into lock zone.
* @note It is also invoked when the threads simply return in order to
* terminate.
*/ */
#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add threads finalization code here.*/ \
} }
#endif #endif
/** /**
* Code inserted inside the idle thread loop immediately after an interrupt * @brief Idle Loop hook.
* resumed execution. * @details This hook is continuously invoked by the idle thread loop.
*/ */
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) #if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
#define IDLE_LOOP_HOOK() { \ #define IDLE_LOOP_HOOK() { \

View File

@ -18,9 +18,9 @@
*/ */
/** /**
* @file src/templates/chconf.h * @file templates/chconf.h
* @brief Configuration file template. * @brief Configuration file template.
* @addtogroup Config * @addtogroup config
* @{ * @{
*/ */
@ -32,29 +32,36 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Frequency of the system timer that drives the system ticks. This also * @brief System tick frequency.
* defines the system tick time unit. * @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/ */
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) #if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif #endif
/** /**
* This constant is the number of system ticks allowed for the threads before * @brief Round robin interval.
* preemption occurs. This option is only meaningful if the option * @details This constant is the number of system ticks allowed for the
* @p CH_USE_ROUNDROBIN is also active. * threads before preemption occurs. Setting this value to zero
* disables the round robin mechanism.
*
* @note Disabling round robin makes the kernel more compact and generally
* faster but forbids multiple threads at the same priority level.
*/ */
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif #endif
/** /**
* If enabled then the use of nested @p chSysLock() / @p chSysUnlock() * @brief Nested locks.
* operations is allowed.<br> * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is to leave * operations is allowed.<br>
* this option disabled.<br> * For performance and code size reasons the recommended setting
* You can use this option if you need to merge ChibiOS/RT with external * is to leave this option disabled.<br>
* libraries that require nested lock/unlock operations. * You may use this option if you need to merge ChibiOS/RT with
* external libraries that require nested lock/unlock operations.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) #if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
@ -62,23 +69,18 @@
#endif #endif
/** /**
* If specified then the kernel performs the round robin scheduling algorithm * @brief Managed RAM size.
* on threads of equal priority. * @details Size of the RAM area to be managed by the OS. If set to zero
* @note The default is @p TRUE. * then the whole available RAM is used. The core memory is made
*/ * available to the heap allocator and/or can be used directly through
#if !defined(CH_USE_ROUNDROBIN) || defined(__DOXYGEN__) * the simplified core memory allocator.
#define CH_USE_ROUNDROBIN TRUE *
#endif * @note In order to let the OS manage the whole RAM the linker script must
/**
* Number of RAM bytes to use as system heap. If set to zero then the whole
* available RAM is used as system heap.
* @note In order to use the whole RAM as system heap the linker script must
* provide the @p __heap_base__ and @p __heap_end__ symbols. * provide the @p __heap_base__ and @p __heap_end__ symbols.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_COREMEM.
*/ */
#if !defined(CH_HEAP_SIZE) || defined(__DOXYGEN__) #if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
#define CH_HEAP_SIZE 0 #define CH_MEMCORE_SIZE 0
#endif #endif
/*===========================================================================*/ /*===========================================================================*/
@ -86,8 +88,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then time efficient rather than space efficient code is used * @brief OS optimization.
* when two possible implementations exist. * @details If enabled then time efficient rather than space efficient code
* is used when two possible implementations exist.
*
* @note This is not related to the compiler optimization options. * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
@ -96,18 +100,20 @@
#endif #endif
/** /**
* If enabled defines a CPU register to be used as storage for the global * @brief Exotic optimization.
* @p currp variable. Caching this variable in a register can greatly * @details If defined then a CPU register is used as storage for the global
* improve both space and time efficiency of the generated code. Another side * @p currp variable. Caching this variable in a register greatly
* effect is that one less register has to be saved during the context switch * improves both space and time OS efficiency. A side effect is that
* resulting in lower RAM usage and faster code. * one less register has to be saved during the context switch
* resulting in lower RAM usage and faster context switch.
*
* @note This option is only usable with the GCC compiler and is only useful * @note This option is only usable with the GCC compiler and is only useful
* on processors with many registers like ARM cores. * on processors with many registers like ARM cores.
* @note If this option is enabled then ALL the libraries linked to the * @note If this option is enabled then ALL the libraries linked to the
* ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p * ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p
* -ffixed-@<reg@>. * -ffixed-@<reg@>.
* @note This option must be enabled in the Makefile, it is listed here for * @note This option must be enabled in the Makefile, it is listed here for
* documentation. * documentation only.
*/ */
#if defined(__DOXYGEN__) #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg" #define CH_CURRP_REGISTER_CACHE "reg"
@ -118,7 +124,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then the @p chThdWait() function is included in the kernel. * @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) #if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
@ -126,7 +135,9 @@
#endif #endif
/** /**
* If specified then the Semaphores APIs are included in the kernel. * @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) #if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
@ -134,8 +145,10 @@
#endif #endif
/** /**
* If enabled then the threads are enqueued on semaphores by priority rather * @brief Semaphores queuing mode.
* than FIFO order. * @details If enabled then the threads are enqueued on semaphores by
* priority rather than in FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -144,8 +157,10 @@
#endif #endif
/** /**
* If specified then the Semaphores the @p chSemWaitSignal() API is included * @brief Atomic semaphore API.
* in the kernel. * @details If enabled then the semaphores the @p chSemWaitSignal() API
* is included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -154,7 +169,9 @@
#endif #endif
/** /**
* If specified then the Mutexes APIs are included in the kernel. * @brief Mutexes APIs.
* @details If enabled then the mutexes APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
@ -162,7 +179,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs.
* @details If enabled then the conditional variables APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES. * @note Requires @p CH_USE_MUTEXES.
*/ */
@ -171,7 +191,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs with timeout.
* @details If enabled then the conditional variables APIs with timeout
* specification are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS. * @note Requires @p CH_USE_CONDVARS.
*/ */
@ -180,7 +203,9 @@
#endif #endif
/** /**
* If specified then the Event flags APIs are included in the kernel. * @brief Events Flags APIs.
* @details If enabled then the event flags APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) #if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
@ -188,8 +213,10 @@
#endif #endif
/** /**
* If specified then the @p chEvtWaitXXXTimeout() functions are included in * @brief Events Flags APIs with timeout.
* the kernel. * @details If enabled then the events APIs with timeout specification
* are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS. * @note Requires @p CH_USE_EVENTS.
*/ */
@ -198,7 +225,10 @@
#endif #endif
/** /**
* If specified then the Synchronous Messages APIs are included in the kernel. * @brief Synchronous Messages APIs.
* @details If enabled then the synchronous messages APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) #if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
@ -206,7 +236,10 @@
#endif #endif
/** /**
* If enabled then messages are served by priority rather than in FIFO order. * @brief Synchronous Messages queuing mode.
* @details If enabled then messages are served by priority rather than in
* FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_MESSAGES. * @note Requires @p CH_USE_MESSAGES.
*/ */
@ -215,16 +248,21 @@
#endif #endif
/** /**
* If specified then the Asynchronous Messages (Mailboxes) APIs are included * @brief Mailboxes APIs.
* in the kernel. * @details If enabled then the asynchronous messages (mailboxes) APIs are
* included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/ */
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
#define CH_USE_MAILBOXES TRUE #define CH_USE_MAILBOXES TRUE
#endif #endif
/** /**
* If specified then the I/O queues APIs are included in the kernel. * @brief I/O Queues APIs.
* @details If enabled then the I/O queues APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -233,9 +271,24 @@
#endif #endif
/** /**
* If specified then the memory heap allocator APIs are included in the kernel. * @brief Core Memory Manager APIs.
* @details If enabled then the core memory manager APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES. */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MEMCORE TRUE
#endif
/**
* @brief Heap Allocator APIs.
* @details If enabled then the memory heap allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE.
* @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
* @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended. * @note Mutexes are recommended.
*/ */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
@ -243,18 +296,24 @@
#endif #endif
/** /**
* If enabled enforces the use of the C-runtime @p malloc() and @p free() * @brief C-runtime allocator.
* functions as backend for the system heap allocator. * @details If enabled the the heap allocator APIs just wrap the C-runtime
* @p malloc() and @p free() functions.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_HEAP.
* @note The C-runtime may or may not require @p CH_USE_COREMEM, see the
* appropriate documentation.
*/ */
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MALLOC_HEAP FALSE #define CH_USE_MALLOC_HEAP FALSE
#endif #endif
/** /**
* If specified then the memory pools allocator APIs are included in the * @brief Memory Pools Allocator APIs.
* kernel. * @details If enabled then the memory pools allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) #if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
@ -262,8 +321,10 @@
#endif #endif
/** /**
* If specified then the dynamic threads creation APIs are included in the * @brief Dynamic Threads APIs.
* kernel. * @details If enabled then the dynamic threads creation APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT. * @note Requires @p CH_USE_WAITEXIT.
*/ */
@ -276,8 +337,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Debug option, if enabled then the checks on the API functions input * @brief Debug option, parameters checks.
* parameters are activated. * @details If enabled then the checks on the API functions input
* parameters are activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
@ -285,9 +348,11 @@
#endif #endif
/** /**
* Debug option, if enabled then all the assertions in the kernel code are * @brief Debug option, consistency checks.
* activated. This includes consistency checks inside the kernel, runtime * @details If enabled then all the assertions in the kernel code are
* anomalies and port-defined checks. * activated. This includes consistency checks inside the kernel,
* runtime anomalies and port-defined checks.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
@ -295,8 +360,10 @@
#endif #endif
/** /**
* Debug option, if enabled the context switch circular trace buffer is * @brief Debug option, trace buffer.
* activated. * @details If enabled then the context switch circular trace buffer is
* activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
@ -304,25 +371,37 @@
#endif #endif
/** /**
* Debug option, if enabled a runtime stack check is performed. * @brief Debug option, stack checks.
* @details If enabled then a runtime stack check is performed.
*
* @note The default is @p FALSE.
* @note The stack check is performed in a architecture/port dependent way. It * @note The stack check is performed in a architecture/port dependent way. It
* may not be implemented at all. * may not be implemented or some ports.
*/ */
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE #define CH_DBG_ENABLE_STACK_CHECK FALSE
#endif #endif
/** /**
* Debug option, if enabled the threads working area is filled with a byte * @brief Debug option, stacks initialization.
* pattern when a thread is created. * @details If enabled then the threads working area is filled with a byte
* value when a thread is created. This can be useful for the
* runtime measurement of the used stack.
*
* @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
#define CH_DBG_FILL_THREADS FALSE #define CH_DBG_FILL_THREADS FALSE
#endif #endif
/** /**
* Debug option, if enabled a field is added to the @p Thread structure that * @brief Debug option, threads profiling.
* counts the system ticks occurred while executing the thread. * @details If enabled then a field is added to the @p Thread structure that
* counts the system ticks occurred while executing the thread.
*
* @note The default is @p TRUE.
* @note This debug option is defaulted to TRUE because it is required by
* some test cases into the test suite.
*/ */
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
#define CH_DBG_THREADS_PROFILING TRUE #define CH_DBG_THREADS_PROFILING TRUE
@ -333,38 +412,46 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* User fields added to the end of the @p Thread structure. * @brief Threads descriptor structure hook.
* @details User fields added to the end of the @p Thread structure.
*/ */
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add threads custom fields here.*/ \
}; };
#endif #endif
/** /**
* User initialization code added to the @p chThdInit() API. * @brief Threads initialization hook.
* @note It is invoked from within @p chThdInit(). * @details User initialization code added to the @p chThdInit() API.
*
* @note It is invoked from within @p chThdInit() and implicitily from all
* the threads creation APIs.
*/ */
#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add threads initialization code here.*/ \
} }
#endif #endif
/** /**
* User finalization code added to the @p chThdExit() API. * @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*
* @note It is inserted into lock zone. * @note It is inserted into lock zone.
* @note It is also invoked when the threads simply return in order to
* terminate.
*/ */
#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add threads finalization code here.*/ \
} }
#endif #endif
/** /**
* Code inserted inside the idle thread loop immediately after an interrupt * @brief Idle Loop hook.
* resumed execution. * @details This hook is continuously invoked by the idle thread loop.
*/ */
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) #if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
#define IDLE_LOOP_HOOK() { \ #define IDLE_LOOP_HOOK() { \

View File

@ -18,9 +18,9 @@
*/ */
/** /**
* @file src/templates/chconf.h * @file templates/chconf.h
* @brief Configuration file template. * @brief Configuration file template.
* @addtogroup Config * @addtogroup config
* @{ * @{
*/ */
@ -32,29 +32,36 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Frequency of the system timer that drives the system ticks. This also * @brief System tick frequency.
* defines the system tick time unit. * @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/ */
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) #if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif #endif
/** /**
* This constant is the number of system ticks allowed for the threads before * @brief Round robin interval.
* preemption occurs. This option is only meaningful if the option * @details This constant is the number of system ticks allowed for the
* @p CH_USE_ROUNDROBIN is also active. * threads before preemption occurs. Setting this value to zero
* disables the round robin mechanism.
*
* @note Disabling round robin makes the kernel more compact and generally
* faster but forbids multiple threads at the same priority level.
*/ */
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif #endif
/** /**
* If enabled then the use of nested @p chSysLock() / @p chSysUnlock() * @brief Nested locks.
* operations is allowed.<br> * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is to leave * operations is allowed.<br>
* this option disabled.<br> * For performance and code size reasons the recommended setting
* You can use this option if you need to merge ChibiOS/RT with external * is to leave this option disabled.<br>
* libraries that require nested lock/unlock operations. * You may use this option if you need to merge ChibiOS/RT with
* external libraries that require nested lock/unlock operations.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__) #if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
@ -62,23 +69,18 @@
#endif #endif
/** /**
* If specified then the kernel performs the round robin scheduling algorithm * @brief Managed RAM size.
* on threads of equal priority. * @details Size of the RAM area to be managed by the OS. If set to zero
* @note The default is @p TRUE. * then the whole available RAM is used. The core memory is made
*/ * available to the heap allocator and/or can be used directly through
#if !defined(CH_USE_ROUNDROBIN) || defined(__DOXYGEN__) * the simplified core memory allocator.
#define CH_USE_ROUNDROBIN TRUE *
#endif * @note In order to let the OS manage the whole RAM the linker script must
/**
* Number of RAM bytes to use as system heap. If set to zero then the whole
* available RAM is used as system heap.
* @note In order to use the whole RAM as system heap the linker script must
* provide the @p __heap_base__ and @p __heap_end__ symbols. * provide the @p __heap_base__ and @p __heap_end__ symbols.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_COREMEM.
*/ */
#if !defined(CH_HEAP_SIZE) || defined(__DOXYGEN__) #if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
#define CH_HEAP_SIZE 0 #define CH_MEMCORE_SIZE 0
#endif #endif
/*===========================================================================*/ /*===========================================================================*/
@ -86,8 +88,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then time efficient rather than space efficient code is used * @brief OS optimization.
* when two possible implementations exist. * @details If enabled then time efficient rather than space efficient code
* is used when two possible implementations exist.
*
* @note This is not related to the compiler optimization options. * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
@ -96,18 +100,20 @@
#endif #endif
/** /**
* If enabled defines a CPU register to be used as storage for the global * @brief Exotic optimization.
* @p currp variable. Caching this variable in a register can greatly * @details If defined then a CPU register is used as storage for the global
* improve both space and time efficiency of the generated code. Another side * @p currp variable. Caching this variable in a register greatly
* effect is that one less register has to be saved during the context switch * improves both space and time OS efficiency. A side effect is that
* resulting in lower RAM usage and faster code. * one less register has to be saved during the context switch
* resulting in lower RAM usage and faster context switch.
*
* @note This option is only usable with the GCC compiler and is only useful * @note This option is only usable with the GCC compiler and is only useful
* on processors with many registers like ARM cores. * on processors with many registers like ARM cores.
* @note If this option is enabled then ALL the libraries linked to the * @note If this option is enabled then ALL the libraries linked to the
* ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p * ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p
* -ffixed-@<reg@>. * -ffixed-@<reg@>.
* @note This option must be enabled in the Makefile, it is listed here for * @note This option must be enabled in the Makefile, it is listed here for
* documentation. * documentation only.
*/ */
#if defined(__DOXYGEN__) #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg" #define CH_CURRP_REGISTER_CACHE "reg"
@ -118,7 +124,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* If specified then the @p chThdWait() function is included in the kernel. * @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) #if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
@ -126,7 +135,9 @@
#endif #endif
/** /**
* If specified then the Semaphores APIs are included in the kernel. * @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) #if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
@ -134,8 +145,10 @@
#endif #endif
/** /**
* If enabled then the threads are enqueued on semaphores by priority rather * @brief Semaphores queuing mode.
* than FIFO order. * @details If enabled then the threads are enqueued on semaphores by
* priority rather than in FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -144,8 +157,10 @@
#endif #endif
/** /**
* If specified then the Semaphores the @p chSemWaitSignal() API is included * @brief Atomic semaphore API.
* in the kernel. * @details If enabled then the semaphores the @p chSemWaitSignal() API
* is included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -154,7 +169,9 @@
#endif #endif
/** /**
* If specified then the Mutexes APIs are included in the kernel. * @brief Mutexes APIs.
* @details If enabled then the mutexes APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
@ -162,7 +179,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs.
* @details If enabled then the conditional variables APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES. * @note Requires @p CH_USE_MUTEXES.
*/ */
@ -171,7 +191,10 @@
#endif #endif
/** /**
* If specified then the Conditional Variables APIs are included in the kernel. * @brief Conditional Variables APIs with timeout.
* @details If enabled then the conditional variables APIs with timeout
* specification are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS. * @note Requires @p CH_USE_CONDVARS.
*/ */
@ -180,7 +203,9 @@
#endif #endif
/** /**
* If specified then the Event flags APIs are included in the kernel. * @brief Events Flags APIs.
* @details If enabled then the event flags APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) #if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
@ -188,8 +213,10 @@
#endif #endif
/** /**
* If specified then the @p chEvtWaitXXXTimeout() functions are included in * @brief Events Flags APIs with timeout.
* the kernel. * @details If enabled then the events APIs with timeout specification
* are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS. * @note Requires @p CH_USE_EVENTS.
*/ */
@ -198,7 +225,10 @@
#endif #endif
/** /**
* If specified then the Synchronous Messages APIs are included in the kernel. * @brief Synchronous Messages APIs.
* @details If enabled then the synchronous messages APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) #if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
@ -206,7 +236,10 @@
#endif #endif
/** /**
* If enabled then messages are served by priority rather than in FIFO order. * @brief Synchronous Messages queuing mode.
* @details If enabled then messages are served by priority rather than in
* FIFO order.
*
* @note The default is @p FALSE. Enable this if you have special requirements. * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_MESSAGES. * @note Requires @p CH_USE_MESSAGES.
*/ */
@ -215,16 +248,21 @@
#endif #endif
/** /**
* If specified then the Asynchronous Messages (Mailboxes) APIs are included * @brief Mailboxes APIs.
* in the kernel. * @details If enabled then the asynchronous messages (mailboxes) APIs are
* included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/ */
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) #if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
#define CH_USE_MAILBOXES TRUE #define CH_USE_MAILBOXES TRUE
#endif #endif
/** /**
* If specified then the I/O queues APIs are included in the kernel. * @brief I/O Queues APIs.
* @details If enabled then the I/O queues APIs are included in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES. * @note Requires @p CH_USE_SEMAPHORES.
*/ */
@ -233,9 +271,24 @@
#endif #endif
/** /**
* If specified then the memory heap allocator APIs are included in the kernel. * @brief Core Memory Manager APIs.
* @details If enabled then the core memory manager APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES. */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MEMCORE TRUE
#endif
/**
* @brief Heap Allocator APIs.
* @details If enabled then the memory heap allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE.
* @note Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
* @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended. * @note Mutexes are recommended.
*/ */
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
@ -243,18 +296,24 @@
#endif #endif
/** /**
* If enabled enforces the use of the C-runtime @p malloc() and @p free() * @brief C-runtime allocator.
* functions as backend for the system heap allocator. * @details If enabled the the heap allocator APIs just wrap the C-runtime
* @p malloc() and @p free() functions.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
* @note Requires @p CH_USE_HEAP. * @note Requires @p CH_USE_HEAP.
* @note The C-runtime may or may not require @p CH_USE_COREMEM, see the
* appropriate documentation.
*/ */
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) #if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
#define CH_USE_MALLOC_HEAP FALSE #define CH_USE_MALLOC_HEAP FALSE
#endif #endif
/** /**
* If specified then the memory pools allocator APIs are included in the * @brief Memory Pools Allocator APIs.
* kernel. * @details If enabled then the memory pools allocator APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
*/ */
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) #if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
@ -262,8 +321,10 @@
#endif #endif
/** /**
* If specified then the dynamic threads creation APIs are included in the * @brief Dynamic Threads APIs.
* kernel. * @details If enabled then the dynamic threads creation APIs are included
* in the kernel.
*
* @note The default is @p TRUE. * @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT. * @note Requires @p CH_USE_WAITEXIT.
*/ */
@ -276,8 +337,10 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* Debug option, if enabled then the checks on the API functions input * @brief Debug option, parameters checks.
* parameters are activated. * @details If enabled then the checks on the API functions input
* parameters are activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
@ -285,9 +348,11 @@
#endif #endif
/** /**
* Debug option, if enabled then all the assertions in the kernel code are * @brief Debug option, consistency checks.
* activated. This includes consistency checks inside the kernel, runtime * @details If enabled then all the assertions in the kernel code are
* anomalies and port-defined checks. * activated. This includes consistency checks inside the kernel,
* runtime anomalies and port-defined checks.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
@ -295,8 +360,10 @@
#endif #endif
/** /**
* Debug option, if enabled the context switch circular trace buffer is * @brief Debug option, trace buffer.
* activated. * @details If enabled then the context switch circular trace buffer is
* activated.
*
* @note The default is @p FALSE. * @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
@ -304,25 +371,37 @@
#endif #endif
/** /**
* Debug option, if enabled a runtime stack check is performed. * @brief Debug option, stack checks.
* @details If enabled then a runtime stack check is performed.
*
* @note The default is @p FALSE.
* @note The stack check is performed in a architecture/port dependent way. It * @note The stack check is performed in a architecture/port dependent way. It
* may not be implemented at all. * may not be implemented or some ports.
*/ */
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE #define CH_DBG_ENABLE_STACK_CHECK FALSE
#endif #endif
/** /**
* Debug option, if enabled the threads working area is filled with a byte * @brief Debug option, stacks initialization.
* pattern when a thread is created. * @details If enabled then the threads working area is filled with a byte
* value when a thread is created. This can be useful for the
* runtime measurement of the used stack.
*
* @note The default is @p FALSE.
*/ */
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
#define CH_DBG_FILL_THREADS FALSE #define CH_DBG_FILL_THREADS FALSE
#endif #endif
/** /**
* Debug option, if enabled a field is added to the @p Thread structure that * @brief Debug option, threads profiling.
* counts the system ticks occurred while executing the thread. * @details If enabled then a field is added to the @p Thread structure that
* counts the system ticks occurred while executing the thread.
*
* @note The default is @p TRUE.
* @note This debug option is defaulted to TRUE because it is required by
* some test cases into the test suite.
*/ */
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
#define CH_DBG_THREADS_PROFILING TRUE #define CH_DBG_THREADS_PROFILING TRUE
@ -333,38 +412,46 @@
/*===========================================================================*/ /*===========================================================================*/
/** /**
* User fields added to the end of the @p Thread structure. * @brief Threads descriptor structure hook.
* @details User fields added to the end of the @p Thread structure.
*/ */
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add threads custom fields here.*/ \
}; };
#endif #endif
/** /**
* User initialization code added to the @p chThdInit() API. * @brief Threads initialization hook.
* @note It is invoked from within @p chThdInit(). * @details User initialization code added to the @p chThdInit() API.
*
* @note It is invoked from within @p chThdInit() and implicitily from all
* the threads creation APIs.
*/ */
#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add threads initialization code here.*/ \
} }
#endif #endif
/** /**
* User finalization code added to the @p chThdExit() API. * @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*
* @note It is inserted into lock zone. * @note It is inserted into lock zone.
* @note It is also invoked when the threads simply return in order to
* terminate.
*/ */
#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__) #if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add threads finalization code here.*/ \
} }
#endif #endif
/** /**
* Code inserted inside the idle thread loop immediately after an interrupt * @brief Idle Loop hook.
* resumed execution. * @details This hook is continuously invoked by the idle thread loop.
*/ */
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) #if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
#define IDLE_LOOP_HOOK() { \ #define IDLE_LOOP_HOOK() { \