Configuration system improvements.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@739 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2009-02-07 14:59:26 +00:00
parent a13c328709
commit 6cfef53ca5
15 changed files with 2749 additions and 1237 deletions

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0 #define CH_HEAP_SIZE 0
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r7" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some * @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0 #define CH_HEAP_SIZE 0
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r7" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0 #define CH_HEAP_SIZE 0
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r7" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
//#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED FALSE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
//#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
//#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
//#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
//#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
//#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
//#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
//#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN FALSE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
//#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT FALSE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
//#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES FALSE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
//#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW FALSE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
//#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT FALSE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
//#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES FALSE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
//#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS FALSE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
//#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT FALSE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
//#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS FALSE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT FALSE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES FALSE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT FALSE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES FALSE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX FALSE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT FALSE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX FALSE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX FALSE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP FALSE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0 #define CH_HEAP_SIZE 0
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
//#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
//#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS FALSE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC FALSE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r7" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0 #define CH_HEAP_SIZE 0
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r7" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,171 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
/** Configuration option: if specified then the kernel performs the round
* robin scheduling algorithm on threads of equal priority. */
#define CH_USE_ROUNDROBIN
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
#define CH_USE_MESSAGES * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br>
* You can 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.
*/
#ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the kernel performs the round robin scheduling algorithm
* @note requires \p CH_USE_MESSAGES.*/ * on threads of equal priority.
#define CH_USE_MESSAGES_EVENT * @note The default is @p TRUE.
*/
#ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If specified then the @p chThdWait() function is included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
//#define CH_USE_MESSAGES_PRIORITY */
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores APIs are included in the kernel.
#define CH_USE_QUEUES * @note The default is @p TRUE.
*/
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If enabled then the threads are enqueued on semaphores by priority rather
#define CH_USE_QUEUES_HALFDUPLEX * than FIFO order.
* @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Semaphores the @p chSemWaitSignal() API is included
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * in the kernel.
#define CH_USE_QUEUES_TIMEOUT * @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_SERIAL_FULLDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Mutexes APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
*/
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the Conditional Variables APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/**
* If specified then the Event flags APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/**
* If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#define CH_HEAP_SIZE 0 #ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 512
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r8" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,180 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 512 #define CH_HEAP_SIZE 512
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "r8" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,185 +27,345 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/* /**
* NOTE: this is just documentation for doxigen, the real configuration file * If specified then time efficient rather than space efficient code is used
* is the one into the project directories. * when two possible implementations exist.
* @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/ */
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* that this is not related to the compiler optimization options.*/ * operations is allowed.<br>
#define CH_OPTIMIZE_SPEED * For performance and code size reasons the recommended setting is to leave
/** Configuration option: If enabled then the used of nested @p chSysLock() /
* @p chSysUnlock() operations is allowed.<br>
* For performance and code size reasons the recommended setting is leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 512 #define CH_HEAP_SIZE 512
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 100 #define CH_FREQUENCY 100
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 10 #define CH_TIME_QUANTUM 10
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "reg" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Debug option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#endif /* _CHCONF_H_ */ #endif /* _CHCONF_H_ */

View File

@ -18,6 +18,8 @@
*/ */
/** /**
* @file src/templates/chconf.h
* @brief Configuration file template.
* @addtogroup Config * @addtogroup Config
* @{ * @{
*/ */
@ -25,184 +27,349 @@
#ifndef _CHCONF_H_ #ifndef _CHCONF_H_
#define _CHCONF_H_ #define _CHCONF_H_
/** Configuration option: if specified then time efficient rather than space /**
* efficient code is used when two possible implementations exist, note * If specified then time efficient rather than space efficient code is used
* that this is not related to the compiler optimization options.*/ * when two possible implementations exist.
#define CH_OPTIMIZE_SPEED * @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#ifndef CH_OPTIMIZE_SPEED
#define CH_OPTIMIZE_SPEED TRUE
#endif
/** Configuration option: If enabled then the used of nested @p chSysLock() / /**
* @p chSysUnlock() operations is allowed.<br> * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
* For performance and code size reasons the recommended setting is leave * operations is allowed.<br>
* For performance and code size reasons the recommended setting is to leave
* this option disabled.<br> * this option disabled.<br>
* You can use this option if you need to merge ChibiOS/RT with external * You can use this option if you need to merge ChibiOS/RT with external
* libraries that require nested lock/unlock operations. * libraries that require nested lock/unlock operations.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_NESTED_LOCKS #ifndef CH_USE_NESTED_LOCKS
#define CH_USE_NESTED_LOCKS FALSE
#endif
/** Configuration option: if specified then the kernel performs the round /**
* robin scheduling algorithm on threads of equal priority. */ * If specified then the kernel performs the round robin scheduling algorithm
#define CH_USE_ROUNDROBIN * on threads of equal priority.
* @note The default is @p TRUE.
/** Configuration option: if specified then the \p chThdWait() function
* is included in the kernel.*/
#define CH_USE_WAITEXIT
/** Configuration option: if specified then the Semaphores APIs are included
* in the kernel.*/
#define CH_USE_SEMAPHORES
/** Configuration option: If enabled then the threads are enqueued on semaphores
* by priority rather than FIFO order.
* @note requires @p CH_USE_SEMAPHORES.*/
//#define CH_USE_SEMAPHORES_PRIORITY
/** Configuration option: if specified then the Semaphores atomic Signal+Wait
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.*/
#define CH_USE_SEMAPHORES_TIMEOUT
/** Configuration option: if specified then the Mutexes APIs are included in
* the kernel.*/
#define CH_USE_MUTEXES
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.
* @note requires \p CH_USE_CONDVARS and \p CH_USE_MUTEXES.*/
#define CH_USE_CONDVARS_TIMEOUT
/** Configuration option: if specified then the Events APIs are included in
* the kernel.*/
#define CH_USE_EVENTS
/** Configuration option: if specified then the \p chEvtWaitXXXTimeout()
* functions are included in the kernel.
* @note requires \p CH_USE_EVENTS.
*/ */
#define CH_USE_EVENTS_TIMEOUT #ifndef CH_USE_ROUNDROBIN
#define CH_USE_ROUNDROBIN TRUE
#endif
/** Configuration option: if specified then the Synchronous Messages APIs are /**
* included in the kernel.*/ * If specified then the @p chThdWait() function is included in the kernel.
#define CH_USE_MESSAGES * @note The default is @p TRUE.
*/
#ifndef CH_USE_WAITEXIT
#define CH_USE_WAITEXIT TRUE
#endif
/** Configuration option: if specified then the \p chMsgSendWithEvent() /**
* function is included in the kernel. * If specified then the Semaphores APIs are included in the kernel.
* @note requires \p CH_USE_MESSAGES.*/ * @note The default is @p TRUE.
#define CH_USE_MESSAGES_EVENT */
#ifndef CH_USE_SEMAPHORES
#define CH_USE_SEMAPHORES TRUE
#endif
/** Configuration option: If enabled then the threads serve messages by /**
* priority instead of FIFO order. * If enabled then the threads are enqueued on semaphores by priority rather
* @note requires \p CH_USE_MESSAGES.*/ * than FIFO order.
//#define CH_USE_MESSAGES_PRIORITY * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_PRIORITY
#define CH_USE_SEMAPHORES_PRIORITY FALSE
#endif
/** Configuration option: if specified then the I/O queues APIs are included /**
* in the kernel.*/ * If specified then the Semaphores the @p chSemWaitSignal() API is included
#define CH_USE_QUEUES * in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMSW
#define CH_USE_SEMSW TRUE
#endif
/** Configuration option: if specified then the halfduplex queue APIs are /**
* included in the kernel.*/ * If specified then the Semaphores with timeout APIs are included in the
#define CH_USE_QUEUES_HALFDUPLEX * kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_SEMAPHORES_TIMEOUT
#define CH_USE_SEMAPHORES_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the I/O queues with timeout /**
* APIs are included in the kernel. * If specified then the Mutexes APIs are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/ * @note The default is @p TRUE.
#define CH_USE_QUEUES_TIMEOUT */
#ifndef CH_USE_MUTEXES
#define CH_USE_MUTEXES TRUE
#endif
/** Configuration option: if specified then the full duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_FULLDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES.
*/
#ifndef CH_USE_CONDVARS
#define CH_USE_CONDVARS TRUE
#endif
/** Configuration option: if specified then the half duplex serial driver APIs /**
* are included in the kernel.*/ * If specified then the Conditional Variables APIs are included in the kernel.
#define CH_USE_SERIAL_HALFDUPLEX * @note The default is @p TRUE.
* @note Requires @p CH_USE_CONDVARS.
*/
#ifndef CH_USE_CONDVARS_TIMEOUT
#define CH_USE_CONDVARS_TIMEOUT TRUE
#endif
/** Configuration option: if specified then the memory heap allocator APIs /**
* are included in the kernel.*/ * If specified then the Event flags APIs are included in the kernel.
#define CH_USE_HEAP * @note The default is @p TRUE.
*/
#ifndef CH_USE_EVENTS
#define CH_USE_EVENTS TRUE
#endif
/** Configuration option: Number of RAM bytes to use as system heap. If set to /**
* zero then the whole available RAM is used as system heap. * If specified then the @p chEvtWaitXXXTimeout() functions are included in
* the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_EVENTS.
*/
#ifndef CH_USE_EVENTS_TIMEOUT
#define CH_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* If specified then the Synchronous Messages APIs are included in the kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MESSAGES
#define CH_USE_MESSAGES TRUE
#endif
/**
* If specified then the @p chMsgSendWithEvent() function is included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MESSAGES and @p CH_USE_EVENTS.
*/
#ifndef CH_USE_MESSAGES_EVENT
#define CH_USE_MESSAGES_EVENT TRUE
#endif
/**
* 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 Requires @p CH_USE_MESSAGES.
*/
#ifndef CH_USE_MESSAGES_PRIORITY
#define CH_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* If specified then the I/O queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES
#define CH_USE_QUEUES TRUE
#endif
/**
* If specified then the half duplex queues APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_SEMAPHORES.
*/
#ifndef CH_USE_QUEUES_HALFDUPLEX
#define CH_USE_QUEUES_HALFDUPLEX TRUE
#endif
/**
* If specified then the I/O queues with timeout APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES and @p CH_USE_SEMAPHORES_TIMEOUT.
*/
#ifndef CH_USE_QUEUES_TIMEOUT
#define CH_USE_QUEUES_TIMEOUT TRUE
#endif
/**
* If specified then the full duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES.
*/
#ifndef CH_USE_SERIAL_FULLDUPLEX
#define CH_USE_SERIAL_FULLDUPLEX TRUE
#endif
/**
* If specified then the half duplex serial driver APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_QUEUES_HALFDUPLEX.
*/
#ifndef CH_USE_SERIAL_HALFDUPLEX
#define CH_USE_SERIAL_HALFDUPLEX TRUE
#endif
/**
* If specified then the memory heap allocator APIs are included in the kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_MUTEXES or @p CH_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#ifndef CH_USE_HEAP
#define CH_USE_HEAP TRUE
#endif
/**
* 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 * @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_HEAP.
*/ */
#ifndef CH_HEAP_SIZE
#define CH_HEAP_SIZE 0x20000 #define CH_HEAP_SIZE 0x20000
#endif
/** Configuration option: enforces the use of the C-runtime \p malloc() and /**
* \p free() functions as backend for the system heap allocator.*/ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
//#define CH_USE_MALLOC_HEAP * functions as backend for the system heap allocator.
* @note The default is @p FALSE.
/** Configuration option: if specified then the memory pools allocator APIs * @note Requires @p CH_USE_HEAP.
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/ */
#define CH_USE_DYNAMIC #ifndef CH_USE_MALLOC_HEAP
#define CH_USE_MALLOC_HEAP FALSE
#endif
/** Configuration option: Frequency of the system timer that drives the system /**
* ticks. This also defines the system time unit.*/ * If specified then the memory pools allocator APIs are included in the
* kernel.
* @note The default is @p TRUE.
*/
#ifndef CH_USE_MEMPOOLS
#define CH_USE_MEMPOOLS TRUE
#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
* @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
#ifndef CH_USE_DYNAMIC
#define CH_USE_DYNAMIC TRUE
#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
#ifndef CH_FREQUENCY
#define CH_FREQUENCY 1000 #define CH_FREQUENCY 1000
#endif
/** Configuration option: This constant is the number of ticks allowed for the /**
* threads before preemption occurs. This option is only meaningful if the * This constant is the number of system ticks allowed for the threads before
* option \p CH_USE_ROUNDROBIN is also active.*/ * preemption occurs. This option is only meaningful if the option
* @p CH_USE_ROUNDROBIN is also active.
*/
#ifndef CH_TIME_QUANTUM
#define CH_TIME_QUANTUM 20 #define CH_TIME_QUANTUM 20
#endif
/** Configuration option: Defines a CPU register to be used as storage for the /**
* global \p currp variable. Caching this variable in a register can greatly * If enabled defines a CPU register to be used as storage for the global
* @p currp variable. Caching this variable in a register can greatly
* improve both space and time efficiency of the generated code. Another side * improve both space and time efficiency of the generated code. Another side
* effect is that one less register has to be saved during the context switch * effect is that one less register has to be saved during the context switch
* resulting in lower RAM usage and faster code. * resulting in lower RAM usage and faster code.
* @note This option is only useable 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
* documentation.
*/ */
//#define CH_CURRP_REGISTER_CACHE "reg" #if defined(__DOXYGEN__)
#define CH_CURRP_REGISTER_CACHE "reg"
#endif
/** Configuration option: Includes basic debug support to the kernel. /**
* @note the debug support is port-dependent, it may be not present on some * Debug option, if enableed includes basic debug support to the kernel.
* @note The debug support is port-dependent, it may be not present on some
* targets. In that case stub functions will be included. * targets. In that case stub functions will be included.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_DEBUG #ifndef CH_USE_DEBUG
#define CH_USE_DEBUG FALSE
#endif
/** Debug option: Includes the threads context switch tracing feature. /**
* Debug option, includes the threads context switch tracing feature.
* @note The default is @p FALSE.
*/ */
//#define CH_USE_TRACE #ifndef CH_USE_TRACE
#define CH_USE_TRACE FALSE
#endif
/** User fields added to the end of the \p Thread structure. */ /**
* User fields added to the end of the @p Thread structure.
*/
#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \ #define THREAD_EXT_FIELDS \
struct { \ struct { \
/* Add thread custom fields here.*/ \ /* Add thread custom fields here.*/ \
/* The thread termination \p EventSource.*/ \ /* The thread termination \p EventSource.*/ \
EventSource p_exitesource; \ EventSource p_exitesource; \
}; };
#endif
/** User initialization code added to the \p chThdCreate() API. /**
* @note It is invoked from within \p chThdInit(). */ * User initialization code added to the @p chThdInit() API.
* @note It is invoked from within @p chThdInit().
*/
#ifndef THREAD_EXT_INIT
#define THREAD_EXT_INIT(tp) { \ #define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \ /* Add thread initialization code here.*/ \
chEvtInit(&tp->p_exitesource); \ chEvtInit(&tp->p_exitesource); \
} }
#endif
/** User finalization code added to the \p chThdExit() API. /**
* @note It is inserted into lock zone. */ * User finalization code added to the @p chThdExit() API.
* @note It is inserted into lock zone.
*/
#ifndef THREAD_EXT_EXIT
#define THREAD_EXT_EXIT(tp) { \ #define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \ /* Add thread finalization code here.*/ \
chEvtBroadcastI(&currp->p_exitesource); \ chEvtBroadcastI(&currp->p_exitesource); \
} }
#endif
/**
* Code inserted inside the idle thread loop immediately after an interrupt
* resumed execution.
*/
#ifndef IDLE_LOOP_HOOK
#define IDLE_LOOP_HOOK() { \
/* Idle loop code here.*/ \
}
#endif
#define chThdGetExitEventSource(tp) (&(tp)->p_exitesource) #define chThdGetExitEventSource(tp) (&(tp)->p_exitesource)

View File

@ -33,7 +33,7 @@
* buffers depending on the requirements of your application. * buffers depending on the requirements of your application.
* @note The default is 32 bytes for both the transmission and receive buffers. * @note The default is 32 bytes for both the transmission and receive buffers.
*/ */
#ifndef SERIAL_BUFFERS_SIZE #if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
#define SERIAL_BUFFERS_SIZE 32 #define SERIAL_BUFFERS_SIZE 32
#endif #endif

View File

@ -204,7 +204,7 @@ struct context {
/** /**
* This port function is implemented as inlined code for performance reasons. * This port function is implemented as inlined code for performance reasons.
* @note The port code does not define a low poer mode, this macro has to be * @note The port code does not define a low power mode, this macro has to be
* defined externally. The default implementation is a "nop", not a * defined externally. The default implementation is a "nop", not a
* real low power mode. * real low power mode.
*/ */

View File

@ -33,7 +33,7 @@
* buffers depending on the requirements of your application. * buffers depending on the requirements of your application.
* @note The default is 32 bytes for both the transmission and receive buffers. * @note The default is 32 bytes for both the transmission and receive buffers.
*/ */
#ifndef SERIAL_BUFFERS_SIZE #if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
#define SERIAL_BUFFERS_SIZE 32 #define SERIAL_BUFFERS_SIZE 32
#endif #endif

View File

@ -93,6 +93,10 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
- NEW: Added a configuration option that enables the priority enqueuing on - NEW: Added a configuration option that enables the priority enqueuing on
semaphores. It is defaulted to off because usually semaphores are used for semaphores. It is defaulted to off because usually semaphores are used for
I/O related tasks without hard realtime requirements. I/O related tasks without hard realtime requirements.
- NEW: Now the all the options in chconf.h and the various driver headers
can be overridden externally, as example from within the Makefile.
The options are no mode a simple define but a define with an assigned
TRUE/FALSE value within an #ifndef block.
- NEW: Idle thread hook macro added to the configuration file. - NEW: Idle thread hook macro added to the configuration file.
- OPT: Improved ARM7 thumb port code, thanks to some GCC tricks involving - OPT: Improved ARM7 thumb port code, thanks to some GCC tricks involving
registers usage now the kernel is much smaller, faster and most OS APIs registers usage now the kernel is much smaller, faster and most OS APIs

View File

@ -64,7 +64,7 @@ typedef struct {
#if CH_USE_ROUNDROBIN #if CH_USE_ROUNDROBIN
cnt_t r_preempt; /**< Round robin counter.*/ cnt_t r_preempt; /**< Round robin counter.*/
#endif #endif
#if !CH_CURRP_REGISTER_CACHE #ifndef CH_CURRP_REGISTER_CACHE
Thread *r_current; /**< The currently running thread.*/ Thread *r_current; /**< The currently running thread.*/
#endif #endif
} ReadyList; } ReadyList;
@ -89,7 +89,7 @@ extern "C" {
} }
#endif #endif
#if CH_CURRP_REGISTER_CACHE #ifdef CH_CURRP_REGISTER_CACHE
register Thread *currp asm(CH_CURRP_REGISTER_CACHE); register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
#else #else
#define currp rlist.r_current #define currp rlist.r_current

View File

@ -2,7 +2,8 @@ After 1.0.0:
- Update C++ wrapper (Heap, Pools). - Update C++ wrapper (Heap, Pools).
* Priority ordering option for semaphores. * Priority ordering option for semaphores.
* chSysLock() and chSysUnlock() with counter (option). * chSysLock() and chSysUnlock() with counter (option).
X OSEK-style chSysSuspendAll()/chSysResumeAll()/chSysEnable()/chSysDisable(). * OSEK-style chSysSuspendAll()/chSysResumeAll()/chSysEnable()/chSysDisable(),
implemented this as the new Suspended and Disabled states in 1.1.
- OSEK-style simple tasks within the idle thread. - OSEK-style simple tasks within the idle thread.
- Think to something for threads restart. - Think to something for threads restart.
X lwIP TCP/IP stack integration. X lwIP TCP/IP stack integration.
@ -11,7 +12,7 @@ X lwIP TCP/IP stack integration.
- Multiple debug levels. - Multiple debug levels.
- Stack guard pages. - Stack guard pages.
* Idle loop hook macro. * Idle loop hook macro.
X Switch the configuration options to TRUE/FALSE rather than def/undef. * Switch the configuration options to TRUE/FALSE rather than def/undef.
Ideas for 2.x.x: Ideas for 2.x.x:
- Reference counter for threads, concept of detached threads, threads - Reference counter for threads, concept of detached threads, threads