aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-07 14:59:26 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-07 14:59:26 +0000
commit6cfef53ca56e835c9fcd28206971bf15e17fb31b (patch)
tree3f7dba0fec675d8bdffd6a2c159f79f62be676fc
parenta13c32870977d0b368520d5cd667b1a904a899e7 (diff)
downloadChibiOS-6cfef53ca56e835c9fcd28206971bf15e17fb31b.tar.gz
ChibiOS-6cfef53ca56e835c9fcd28206971bf15e17fb31b.tar.bz2
ChibiOS-6cfef53ca56e835c9fcd28206971bf15e17fb31b.zip
Configuration system improvements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@739 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARM7-AT91SAM7X-GCC/chconf.h461
-rw-r--r--demos/ARM7-AT91SAM7X-WEB-GCC/chconf.h459
-rw-r--r--demos/ARM7-LPC214x-G++/chconf.h459
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/chconf.h459
-rw-r--r--demos/ARM7-LPC214x-GCC/chconf.h459
-rw-r--r--demos/AVR-AT90CANx-GCC/chconf.h450
-rw-r--r--demos/AVR-ATmega128-GCC/chconf.h459
-rw-r--r--demos/MSP430-MSP430x1611-GCC/chconf.h460
-rw-r--r--demos/Win32-MinGW/chconf.h459
-rw-r--r--ports/AVR/avr_serial.h2
-rw-r--r--ports/MSP430/chcore.h2
-rw-r--r--ports/MSP430/msp430_serial.h2
-rw-r--r--readme.txt4
-rw-r--r--src/include/scheduler.h4
-rw-r--r--todo.txt5
15 files changed, 2828 insertions, 1316 deletions
diff --git a/demos/ARM7-AT91SAM7X-GCC/chconf.h b/demos/ARM7-AT91SAM7X-GCC/chconf.h
index 4c42fbfad..f05f8b0b5 100644
--- a/demos/ARM7-AT91SAM7X-GCC/chconf.h
+++ b/demos/ARM7-AT91SAM7X-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0
+#ifndef CH_HEAP_SIZE
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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
- * targets. In that case stub functions will be included.
+/**
+ * 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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/ARM7-AT91SAM7X-WEB-GCC/chconf.h b/demos/ARM7-AT91SAM7X-WEB-GCC/chconf.h
index ff4a00298..f05f8b0b5 100644
--- a/demos/ARM7-AT91SAM7X-WEB-GCC/chconf.h
+++ b/demos/ARM7-AT91SAM7X-WEB-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0
+#ifndef CH_HEAP_SIZE
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/ARM7-LPC214x-G++/chconf.h b/demos/ARM7-LPC214x-G++/chconf.h
index c22e9b542..f05f8b0b5 100644
--- a/demos/ARM7-LPC214x-G++/chconf.h
+++ b/demos/ARM7-LPC214x-G++/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0
+#ifndef CH_HEAP_SIZE
+#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.*/
-#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/ARM7-LPC214x-GCC-minimal/chconf.h b/demos/ARM7-LPC214x-GCC-minimal/chconf.h
index 61484aec7..03352998a 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/chconf.h
+++ b/demos/ARM7-LPC214x-GCC-minimal/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-//#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-//#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-//#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-//#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-//#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-//#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-//#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-//#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED FALSE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN FALSE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT FALSE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES FALSE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES FALSE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS FALSE
+#endif
+
+/**
+ * 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 FALSE
+#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 FALSE
+#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 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0
+#ifndef CH_HEAP_SIZE
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-//#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-//#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC FALSE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/ARM7-LPC214x-GCC/chconf.h b/demos/ARM7-LPC214x-GCC/chconf.h
index ff4a00298..f05f8b0b5 100644
--- a/demos/ARM7-LPC214x-GCC/chconf.h
+++ b/demos/ARM7-LPC214x-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0
+#ifndef CH_HEAP_SIZE
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/AVR-AT90CANx-GCC/chconf.h b/demos/AVR-AT90CANx-GCC/chconf.h
index 2cf2f8507..5e787d675 100644
--- a/demos/AVR-AT90CANx-GCC/chconf.h
+++ b/demos/AVR-AT90CANx-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,171 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @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.*/
-#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/AVR-ATmega128-GCC/chconf.h b/demos/AVR-ATmega128-GCC/chconf.h
index 2de244954..5e787d675 100644
--- a/demos/AVR-ATmega128-GCC/chconf.h
+++ b/demos/AVR-ATmega128-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,180 +27,345 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 512
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-<reg>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/MSP430-MSP430x1611-GCC/chconf.h b/demos/MSP430-MSP430x1611-GCC/chconf.h
index 0fb97ecb7..f24019fcd 100644
--- a/demos/MSP430-MSP430x1611-GCC/chconf.h
+++ b/demos/MSP430-MSP430x1611-GCC/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,185 +27,345 @@
#ifndef _CHCONF_H_
#define _CHCONF_H_
-/*
- * NOTE: this is just documentation for doxigen, the real configuration file
- * is the one into the project directories.
+/**
+ * If specified then time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
-/** Configuration option: if specified then time efficient rather than space
- * efficient code is used when two possible implementations exist, note
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 512
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 100
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 10
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-\<reg\>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* 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) { \
/* 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) { \
/* 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_ */
diff --git a/demos/Win32-MinGW/chconf.h b/demos/Win32-MinGW/chconf.h
index a10e43b7d..ac7131871 100644
--- a/demos/Win32-MinGW/chconf.h
+++ b/demos/Win32-MinGW/chconf.h
@@ -18,6 +18,8 @@
*/
/**
+ * @file src/templates/chconf.h
+ * @brief Configuration file template.
* @addtogroup Config
* @{
*/
@@ -25,184 +27,349 @@
#ifndef _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
- * that this is not related to the compiler optimization options.*/
-#define CH_OPTIMIZE_SPEED
-
-/** 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>
- * You can use this option if you need to merge ChibiOS/RT with external
- * libraries that require nested lock/unlock operations.
- */
-//#define CH_USE_NESTED_LOCKS
-
-/** 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
-
-/** Configuration option: if specified then the Synchronous Messages APIs are
- * included in the kernel.*/
-#define CH_USE_MESSAGES
-
-/** Configuration option: if specified then the \p chMsgSendWithEvent()
- * function is included in the kernel.
- * @note requires \p CH_USE_MESSAGES.*/
-#define CH_USE_MESSAGES_EVENT
-
-/** Configuration option: If enabled then the threads serve messages by
- * priority instead of FIFO order.
- * @note requires \p CH_USE_MESSAGES.*/
-//#define CH_USE_MESSAGES_PRIORITY
-
-/** Configuration option: if specified then the I/O queues APIs are included
- * in the kernel.*/
-#define CH_USE_QUEUES
-
-/** Configuration option: if specified then the halfduplex queue APIs are
- * included in the kernel.*/
-#define CH_USE_QUEUES_HALFDUPLEX
-
-/** Configuration option: if specified then the I/O queues with timeout
- * APIs are included in the kernel.
- * @note requires \p CH_USE_SEMAPHORES_TIMEOUT.*/
-#define CH_USE_QUEUES_TIMEOUT
-
-/** Configuration option: if specified then the full duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_FULLDUPLEX
-
-/** Configuration option: if specified then the half duplex serial driver APIs
- * are included in the kernel.*/
-#define CH_USE_SERIAL_HALFDUPLEX
-
-/** Configuration option: if specified then the memory heap allocator APIs
- * are included in the kernel.*/
-#define CH_USE_HEAP
-
-/** 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 time efficient rather than space efficient code is used
+ * when two possible implementations exist.
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/**
+ * If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
+ * 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
+
+/**
+ * If specified then the kernel performs the round robin scheduling algorithm
+ * on threads of equal priority.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_ROUNDROBIN
+#define CH_USE_ROUNDROBIN TRUE
+#endif
+
+/**
+ * If specified then the @p chThdWait() function is included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_WAITEXIT
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * If specified then the Semaphores APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_SEMAPHORES
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * If enabled then the threads are enqueued on semaphores by priority rather
+ * 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
+
+/**
+ * If specified then the Semaphores the @p chSemWaitSignal() API is included
+ * 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
+
+/**
+ * If specified then the Semaphores with timeout APIs are included in the
+ * 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
+
+/**
+ * If specified then the Mutexes APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ */
+#ifndef CH_USE_MUTEXES
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * If specified then the Conditional Variables APIs are included in the kernel.
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#ifndef CH_USE_CONDVARS
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * 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
- * provide the \p __heap_base__ and \p __heap_end__ symbols.
- * @note requires \p CH_USE_HEAP.
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_HEAP.
*/
-#define CH_HEAP_SIZE 0x20000
+#ifndef CH_HEAP_SIZE
+#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.*/
-//#define CH_USE_MALLOC_HEAP
+/**
+ * If enabled enforces the use of the C-runtime @p malloc() and @p free()
+ * functions as backend for the system heap allocator.
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ */
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
-/** Configuration option: if specified then the memory pools allocator APIs
- * are included in the kernel.*/
-#define CH_USE_MEMPOOLS
+/**
+ * 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
-/** Configuration option: if specified then the dynamic objects creation APIs
- * are included in the kernel.
- * @note requires \p CH_USE_WAITEXIT.
+/**
+ * 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.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
-/** Configuration option: Frequency of the system timer that drives the system
- * ticks. This also defines the system time unit.*/
-#define CH_FREQUENCY 1000
+/**
+ * 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
+#endif
-/** Configuration option: This constant is the number of ticks allowed for the
- * threads before preemption occurs. This option is only meaningful if the
- * option \p CH_USE_ROUNDROBIN is also active.*/
-#define CH_TIME_QUANTUM 20
+/**
+ * This constant is the number of system ticks allowed for the threads before
+ * 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
+#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
- * 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
- * resulting in lower RAM usage and faster code.
- * @note This option is only useable with the GCC compiler and is only useful
- * on processors with many registers like ARM cores.
- * @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
- * -ffixed-\<reg\>.
+/**
+ * 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
+ * effect is that one less register has to be saved during the context switch
+ * resulting in lower RAM usage and faster code.
+ * @note This option is only usable with the GCC compiler and is only useful
+ * on processors with many registers like ARM cores.
+ * @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
+ * -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.
+ * @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 \
struct { \
/* Add thread custom fields here.*/ \
/* The thread termination \p EventSource.*/ \
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) { \
/* Add thread initialization code here.*/ \
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) { \
/* Add thread finalization code here.*/ \
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)
diff --git a/ports/AVR/avr_serial.h b/ports/AVR/avr_serial.h
index 3b87ff938..f97f16e65 100644
--- a/ports/AVR/avr_serial.h
+++ b/ports/AVR/avr_serial.h
@@ -33,7 +33,7 @@
* buffers depending on the requirements of your application.
* @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
#endif
diff --git a/ports/MSP430/chcore.h b/ports/MSP430/chcore.h
index dd0fbc3fb..3fc7161cb 100644
--- a/ports/MSP430/chcore.h
+++ b/ports/MSP430/chcore.h
@@ -204,7 +204,7 @@ struct context {
/**
* 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
* real low power mode.
*/
diff --git a/ports/MSP430/msp430_serial.h b/ports/MSP430/msp430_serial.h
index 5057a5524..2195a6869 100644
--- a/ports/MSP430/msp430_serial.h
+++ b/ports/MSP430/msp430_serial.h
@@ -33,7 +33,7 @@
* buffers depending on the requirements of your application.
* @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
#endif
diff --git a/readme.txt b/readme.txt
index 7739b5fab..cbd40f646 100644
--- a/readme.txt
+++ b/readme.txt
@@ -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
semaphores. It is defaulted to off because usually semaphores are used for
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.
- 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
diff --git a/src/include/scheduler.h b/src/include/scheduler.h
index 612ee8c55..9b16dccc9 100644
--- a/src/include/scheduler.h
+++ b/src/include/scheduler.h
@@ -64,7 +64,7 @@ typedef struct {
#if CH_USE_ROUNDROBIN
cnt_t r_preempt; /**< Round robin counter.*/
#endif
-#if !CH_CURRP_REGISTER_CACHE
+#ifndef CH_CURRP_REGISTER_CACHE
Thread *r_current; /**< The currently running thread.*/
#endif
} ReadyList;
@@ -89,7 +89,7 @@ extern "C" {
}
#endif
-#if CH_CURRP_REGISTER_CACHE
+#ifdef CH_CURRP_REGISTER_CACHE
register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
#else
#define currp rlist.r_current
diff --git a/todo.txt b/todo.txt
index 150cebfe4..2463d2cdf 100644
--- a/todo.txt
+++ b/todo.txt
@@ -2,7 +2,8 @@ After 1.0.0:
- Update C++ wrapper (Heap, Pools).
* Priority ordering option for semaphores.
* 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.
- Think to something for threads restart.
X lwIP TCP/IP stack integration.
@@ -11,7 +12,7 @@ X lwIP TCP/IP stack integration.
- Multiple debug levels.
- Stack guard pages.
* 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:
- Reference counter for threads, concept of detached threads, threads