aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-07 12:42:29 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-07 12:42:29 +0000
commitb08638d7c8e46b3a207705a2e55fdfe4b78cfb3e (patch)
treef9e60d830d48036b3012822a4eedb909c3c4ce25
parent37c2720510cf319159d19398533169711d092f6b (diff)
downloadChibiOS-b08638d7c8e46b3a207705a2e55fdfe4b78cfb3e.tar.gz
ChibiOS-b08638d7c8e46b3a207705a2e55fdfe4b78cfb3e.tar.bz2
ChibiOS-b08638d7c8e46b3a207705a2e55fdfe4b78cfb3e.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@735 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARMCM3-STM32F103-GCC/chconf.h459
-rw-r--r--ports/ARMCM3/chcore.c4
-rw-r--r--ports/ARMCM3/chcore.h2
-rw-r--r--readme.txt7
-rw-r--r--src/chcond.c6
-rw-r--r--src/chdebug.c6
-rw-r--r--src/chevents.c9
-rw-r--r--src/chheap.c16
-rw-r--r--src/chlists.c2
-rw-r--r--src/chmempools.c2
-rw-r--r--src/chmsg.c8
-rw-r--r--src/chmtx.c4
-rw-r--r--src/chqueues.c12
-rw-r--r--src/chschd.c20
-rw-r--r--src/chsem.c8
-rw-r--r--src/chserial.c4
-rw-r--r--src/chsys.c8
-rw-r--r--src/chthreads.c34
-rw-r--r--src/include/ch.h20
-rw-r--r--src/include/condvars.h6
-rw-r--r--src/include/debug.h11
-rw-r--r--src/include/events.h8
-rw-r--r--src/include/inline.h2
-rw-r--r--src/include/lists.h4
-rw-r--r--src/include/mempools.h2
-rw-r--r--src/include/messages.h4
-rw-r--r--src/include/mutexes.h2
-rw-r--r--src/include/queues.h8
-rw-r--r--src/include/scheduler.h6
-rw-r--r--src/include/semaphores.h6
-rw-r--r--src/include/serial.h4
-rw-r--r--src/include/sys.h24
-rw-r--r--src/include/threads.h30
-rw-r--r--src/templates/chconf.h178
34 files changed, 598 insertions, 328 deletions
diff --git a/demos/ARMCM3-STM32F103-GCC/chconf.h b/demos/ARMCM3-STM32F103-GCC/chconf.h
index ff4a00298..f05f8b0b5 100644
--- a/demos/ARMCM3-STM32F103-GCC/chconf.h
+++ b/demos/ARMCM3-STM32F103-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/ports/ARMCM3/chcore.c b/ports/ARMCM3/chcore.c
index 5f4b87dee..cd568a509 100644
--- a/ports/ARMCM3/chcore.c
+++ b/ports/ARMCM3/chcore.c
@@ -178,11 +178,11 @@ void PendSVVector(void) {
(otp = currp)->p_ctx.r13 = sp_thd;
(currp = fifo_remove((void *)&rlist))->p_state = PRCURR;
chSchReadyI(otp);
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
/* set the round-robin time quantum */
rlist.r_preempt = CH_TIME_QUANTUM;
#endif
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
chDbgTrace(otp, currp);
#endif
sp_thd = currp->p_ctx.r13;
diff --git a/ports/ARMCM3/chcore.h b/ports/ARMCM3/chcore.h
index b45da04bb..46a2a533c 100644
--- a/ports/ARMCM3/chcore.h
+++ b/ports/ARMCM3/chcore.h
@@ -270,7 +270,7 @@ struct context {
/**
* This port function is implemented as inlined code for performance reasons.
*/
-#if (ENABLE_WFI_IDLE != 0) || defined(__DOXYGEN__)
+#if ENABLE_WFI_IDLE || defined(__DOXYGEN__)
#define port_wait_for_interrupt() { \
asm volatile ("wfi"); \
}
diff --git a/readme.txt b/readme.txt
index 8e160341d..7739b5fab 100644
--- a/readme.txt
+++ b/readme.txt
@@ -74,10 +74,10 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
*** 1.1.0unstable ***
- FIX: Modified the default value for the STM32 HSI setup it was 1, it should
- be 0x10 (backport in stable branch).
-- FIX: Removed an obsolete constant (P_SUSPENDED) from thread.h (backport in
+ be 0x10 (backported in stable branch).
+- FIX: Removed an obsolete constant (P_SUSPENDED) from thread.h (backported in
stable branch).
-- FIX: Removed unused field mp_grow in the MemoryPool structure (backport in
+- FIX: Removed unused field mp_grow in the MemoryPool structure (backported in
stable branch).
- NEW: Better separation between the port code and the system APIs, now an
architecture-specific "driver" contains all the port related code.
@@ -93,6 +93,7 @@ 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: 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
use less RAM in stack frames (note, this is an ARM7 thumb mode specific
diff --git a/src/chcond.c b/src/chcond.c
index 7b37e454c..d6a68bb72 100644
--- a/src/chcond.c
+++ b/src/chcond.c
@@ -30,7 +30,7 @@
#include <ch.h>
-#if defined(CH_USE_CONDVARS) && defined(CH_USE_MUTEXES)
+#if CH_USE_CONDVARS && CH_USE_MUTEXES
/**
* @brief Initializes s @p CondVar structure.
@@ -150,7 +150,7 @@ msg_t chCondWaitS(CondVar *cp) {
return msg; /* returns the wakeup message */
}
-#ifdef CH_USE_CONDVARS_TIMEOUT
+#if CH_USE_CONDVARS_TIMEOUT
/**
* @brief Waits on the condition variable releasing the mutex lock.
* @details Releases the mutex, waits on the condition variable, and finally
@@ -208,6 +208,6 @@ msg_t chCondWaitTimeoutS(CondVar *cp, systime_t time) {
}
#endif /* CH_USE_CONDVARS_TIMEOUT */
-#endif /* defined(CH_USE_CONDVARS) && defined(CH_USE_MUTEXES) */
+#endif /* CH_USE_CONDVARS && CH_USE_MUTEXES */
/** @} */
diff --git a/src/chdebug.c b/src/chdebug.c
index 8fa67bbf7..4a16e2d2a 100644
--- a/src/chdebug.c
+++ b/src/chdebug.c
@@ -26,7 +26,7 @@
#include <ch.h>
-#ifdef CH_USE_DEBUG
+#if CH_USE_DEBUG
char *panicmsg;
@@ -35,7 +35,7 @@ char *panicmsg;
*/
void debug_init(void) {
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
dbgtb.tb_size = TRACE_BUFFER_SIZE;
dbgtb.tb_ptr = &dbgtb.tb_buffer[0];
#endif
@@ -55,7 +55,7 @@ void chDbgPanic(char *msg) {
chSysHalt();
}
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
/**
* @brief Public trace buffer.
*/
diff --git a/src/chevents.c b/src/chevents.c
index 7f75fbe42..c49b90874 100644
--- a/src/chevents.c
+++ b/src/chevents.c
@@ -25,7 +25,7 @@
*/
#include <ch.h>
-#ifdef CH_USE_EVENTS
+#if CH_USE_EVENTS
/**
* @brief Registers an Event Listener on an Event Source.
*
@@ -193,8 +193,7 @@ void chEvtDispatch(const evhandler_t handlers[], eventmask_t mask) {
}
}
-#if defined(CH_OPTIMIZE_SPEED) || !defined(CH_USE_EVENTS_TIMEOUT) || \
- defined(__DOXIGEN__)
+#if CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT || defined(__DOXIGEN__)
/**
* @brief A pending event among those specified in @p ewmask is selected,
* cleared and its mask returned.
@@ -271,9 +270,9 @@ eventmask_t chEvtWaitAll(eventmask_t ewmask) {
chSysUnlock();
return ewmask;
}
-#endif /* defined(CH_OPTIMIZE_SPEED) || !defined(CH_USE_EVENTS_TIMEOUT) */
+#endif /* CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT */
-#ifdef CH_USE_EVENTS_TIMEOUT
+#if CH_USE_EVENTS_TIMEOUT
/**
* @brief Waits for a single event.
* @details A pending event among those specified in @p ewmask is selected,
diff --git a/src/chheap.c b/src/chheap.c
index 46b26f7d8..5193f19b8 100644
--- a/src/chheap.c
+++ b/src/chheap.c
@@ -26,9 +26,9 @@
#include <ch.h>
-#ifdef CH_USE_HEAP
+#if CH_USE_HEAP
-#ifndef CH_USE_MALLOC_HEAP
+#if !CH_USE_MALLOC_HEAP
#define MAGIC 0xF5A0
#define ALIGN_TYPE void *
@@ -45,11 +45,11 @@ struct header {
static struct {
struct header free; /* Guaranteed to be not adjacent to the heap */
-#if defined(CH_USE_MUTEXES)
+#if CH_USE_MUTEXES
#define H_LOCK() chMtxLock(&heap.hmtx)
#define H_UNLOCK() chMtxUnlock()
Mutex hmtx;
-#elif defined(CH_USE_SEMAPHORES)
+#elif CH_USE_SEMAPHORES
#define H_LOCK() chSemWait(&heap.hsem)
#define H_UNLOCK() chSemSignal(&heap.hsem)
Semaphore hsem;
@@ -86,7 +86,7 @@ void heap_init(void) {
hp->h_next = NULL;
heap.free.h_next = hp;
heap.free.h_size = 0;
-#if defined(CH_USE_MUTEXES)
+#if CH_USE_MUTEXES
chMtxInit(&heap.hmtx);
#else
chSemInit(&heap.hsem, 1);
@@ -219,11 +219,11 @@ size_t chHeapStatus(size_t *sizep) {
#include <stdlib.h>
-#if defined(CH_USE_MUTEXES)
+#if CH_USE_MUTEXES
#define H_LOCK() chMtxLock(&hmtx)
#define H_UNLOCK() chMtxLock(&hmtx)
static Mutex hmtx;
-#elif defined(CH_USE_SEMAPHORES)
+#elif CH_USE_SEMAPHORES
#define H_LOCK() chSemWait(&hsem)
#define H_UNLOCK() chSemSignal(&hsem)
static Semaphore hsem;
@@ -233,7 +233,7 @@ static Semaphore hsem;
void heap_init(void) {
-#if defined(CH_USE_MUTEXES)
+#if CH_USE_MUTEXES
chMtxInit(&hmtx);
#else
chSemInit(&hsem, 1);
diff --git a/src/chlists.c b/src/chlists.c
index fbd9e6a51..82526feb2 100644
--- a/src/chlists.c
+++ b/src/chlists.c
@@ -25,7 +25,7 @@
*/
#include <ch.h>
-#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXIGEN__)
+#if !CH_OPTIMIZE_SPEED || defined(__DOXIGEN__)
/**
* @brief Inserts a thread into a priority ordered queue.
*
diff --git a/src/chmempools.c b/src/chmempools.c
index 1095f1c2b..f052bb1e2 100644
--- a/src/chmempools.c
+++ b/src/chmempools.c
@@ -26,7 +26,7 @@
#include <ch.h>
-#ifdef CH_USE_MEMPOOLS
+#if CH_USE_MEMPOOLS
/**
* @brief Initializes an empty memory pool.
diff --git a/src/chmsg.c b/src/chmsg.c
index 1afe1bc99..c2aee871e 100644
--- a/src/chmsg.c
+++ b/src/chmsg.c
@@ -26,9 +26,9 @@
#include <ch.h>
-#ifdef CH_USE_MESSAGES
+#if CH_USE_MESSAGES
-#ifdef CH_USE_MESSAGES_PRIORITY
+#if CH_USE_MESSAGES_PRIORITY
#define msg_insert(tp, qp) prio_insert(tp, qp)
#else
#define msg_insert(tp, qp) queue_insert(tp, qp)
@@ -59,7 +59,7 @@ msg_t chMsgSend(Thread *tp, msg_t msg) {
return msg;
}
-#if defined(CH_USE_EVENTS) && defined(CH_USE_MESSAGES_EVENT)
+#if CH_USE_EVENTS && CH_USE_MESSAGES_EVENT
/**
* @brief Sends a message to the specified thread and atomically pends an
* events set.
@@ -90,7 +90,7 @@ msg_t chMsgSendWithEvent(Thread *tp, msg_t msg, eventmask_t mask) {
chSysUnlock();
return msg;
}
-#endif /* defined(CH_USE_EVENTS) && defined(CH_USE_MESSAGES_EVENT) */
+#endif /* CH_USE_EVENTS && CH_USE_MESSAGES_EVENT */
/**
* @brief Suspends the thread and waits for an incoming message.
diff --git a/src/chmtx.c b/src/chmtx.c
index 3a110f595..e441a5729 100644
--- a/src/chmtx.c
+++ b/src/chmtx.c
@@ -26,7 +26,7 @@
#include <ch.h>
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
/**
* @brief Initializes s @p Mutex structure.
@@ -88,7 +88,7 @@ void chMtxLockS(Mutex *mp) {
/* boost the owner of this mutex if needed */
tp = tp->p_wtmtxp->m_owner;
continue;
-#ifdef CH_USE_MESSAGES_PRIORITY
+#if CH_USE_MESSAGES_PRIORITY
case PRSNDMSG:
/* requeue tp with its new priority on (?) */
prio_insert(dequeue(tp), &tp->p_wtthdp->p_msgqueue);
diff --git a/src/chqueues.c b/src/chqueues.c
index 69067efd4..968ab273e 100644
--- a/src/chqueues.c
+++ b/src/chqueues.c
@@ -26,7 +26,7 @@
#include <ch.h>
-#ifdef CH_USE_QUEUES
+#if CH_USE_QUEUES
/**
* @brief Initializes an input queue.
@@ -116,7 +116,7 @@ msg_t chIQGet(Queue *qp) {
return b;
}
-#if defined(CH_USE_QUEUES_TIMEOUT) && defined(CH_USE_SEMAPHORES_TIMEOUT)
+#if CH_USE_QUEUES_TIMEOUT && CH_USE_SEMAPHORES_TIMEOUT
/**
* @brief Gets a byte from the input queue.
* @details If the queue is empty then the calling thread is suspended until
@@ -151,7 +151,7 @@ msg_t chIQGetTimeout(Queue *qp, systime_t time) {
chSysUnlock();
return b;
}
-#endif /* defined(CH_USE_QUEUES_TIMEOUT) && defined(CH_USE_SEMAPHORES_TIMEOUT) */
+#endif /* (CH_USE_QUEUES_TIMEOUT && CH_USE_SEMAPHORES_TIMEOUT */
/**
* @brief Reads some data from the input queue into the specified buffer.
@@ -323,7 +323,7 @@ size_t chOQWrite(Queue *qp, uint8_t *buffer, size_t n) {
}
#endif /* CH_USE_QUEUES */
-#ifdef CH_USE_QUEUES_HALFDUPLEX
+#if CH_USE_QUEUES_HALFDUPLEX
/**
* @brief Initializes an half duplex queue.
*
@@ -380,7 +380,7 @@ msg_t chHDQGetReceive(HalfDuplexQueue *qp) {
return b;
}
-#if defined(CH_USE_QUEUES_TIMEOUT) && defined(CH_USE_SEMAPHORES_TIMEOUT)
+#if CH_USE_QUEUES_TIMEOUT && CH_USE_SEMAPHORES_TIMEOUT
/**
* @brief Reads a byte from the receive queue.
* @details If the queue is empty or is in transmission mode then the invoking
@@ -418,7 +418,7 @@ msg_t chHDQGetReceiveTimeout(HalfDuplexQueue *qp, systime_t time) {
chSysUnlock();
return b;
}
-#endif /* defined(CH_USE_QUEUES_TIMEOUT) && defined(CH_USE_SEMAPHORES_TIMEOUT) */
+#endif /* CH_USE_QUEUES_TIMEOUT && CH_USE_SEMAPHORES_TIMEOUT */
/**
* @brief Writes a byte into the transmit queue.
diff --git a/src/chschd.c b/src/chschd.c
index c3ee0c4a8..a07db5737 100644
--- a/src/chschd.c
+++ b/src/chschd.c
@@ -38,7 +38,7 @@ void scheduler_init(void) {
queue_init(&rlist);
rlist.r_prio = NOPRIO;
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
rlist.r_preempt = CH_TIME_QUANTUM;
#endif
}
@@ -53,7 +53,7 @@ void scheduler_init(void) {
* be called soon after.
* @note The function is not meant to be used in the user code directly.
*/
-#ifdef CH_OPTIMIZE_SPEED
+#if CH_OPTIMIZE_SPEED
/* NOTE: it is inlined in this module only.*/
INLINE Thread *chSchReadyI(Thread *tp) {
#else
@@ -85,10 +85,10 @@ void chSchGoSleepS(tstate_t newstate) {
(otp = currp)->p_state = newstate;
(currp = fifo_remove((void *)&rlist))->p_state = PRCURR;
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
rlist.r_preempt = CH_TIME_QUANTUM;
#endif
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
chDbgTrace(otp, currp);
#endif
chSysSwitchI(otp, currp);
@@ -101,7 +101,7 @@ static void wakeup(void *p) {
Thread *tp = (Thread *)p;
switch (tp->p_state) {
-#ifdef CH_USE_SEMAPHORES
+#if CH_USE_SEMAPHORES
case PRWTSEM:
chSemFastSignalI(tp->p_wtsemp);
/* Falls into, intentional. */
@@ -168,10 +168,10 @@ void chSchWakeupS(Thread *ntp, msg_t msg) {
chSchReadyI(otp);
/* change the to-be-run thread to running state */
(currp = ntp)->p_state = PRCURR;
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
rlist.r_preempt = CH_TIME_QUANTUM;
#endif
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
/* trace the context switch */
chDbgTrace(otp, ntp);
#endif
@@ -191,10 +191,10 @@ void chSchDoRescheduleI(void) {
/* pick the first thread from the ready queue and makes it current */
(currp = fifo_remove((void *)&rlist))->p_state = PRCURR;
chSchReadyI(otp);
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
rlist.r_preempt = CH_TIME_QUANTUM;
#endif
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
chDbgTrace(otp, currp);
#endif
chSysSwitchI(otp, currp);
@@ -223,7 +223,7 @@ void chSchRescheduleS(void) {
bool_t chSchRescRequiredI(void) {
tprio_t p1 = firstprio(&rlist);
tprio_t p2 = currp->p_prio;
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
/* If the running thread has not reached its time quantum, reschedule only
* if the first thread on the ready queue has a higher priority.
* Otherwise, if the running thread has used up its time quantum, reschedule
diff --git a/src/chsem.c b/src/chsem.c
index bb6070dd7..578108dff 100644
--- a/src/chsem.c
+++ b/src/chsem.c
@@ -26,9 +26,9 @@
#include <ch.h>
-#ifdef CH_USE_SEMAPHORES
+#if CH_USE_SEMAPHORES
-#ifdef CH_USE_SEMAPHORES_PRIORITY
+#if CH_USE_SEMAPHORES_PRIORITY
#define sem_insert(tp, qp) prio_insert(tp, qp)
#else
#define sem_insert(tp, qp) queue_insert(tp, qp)
@@ -127,7 +127,7 @@ msg_t chSemWaitS(Semaphore *sp) {
return RDY_OK;
}
-#ifdef CH_USE_SEMAPHORES_TIMEOUT
+#if CH_USE_SEMAPHORES_TIMEOUT
/**
* @brief Performs a wait operation on a semaphore with timeout specification.
*
@@ -210,7 +210,7 @@ void chSemSignalI(Semaphore *sp) {
}
}
-#ifdef CH_USE_SEMSW
+#if CH_USE_SEMSW
/**
* @brief Performs atomic signal and wait operations on two semaphores.
*
diff --git a/src/chserial.c b/src/chserial.c
index 9a2dd4018..cb0dfd6b6 100644
--- a/src/chserial.c
+++ b/src/chserial.c
@@ -26,7 +26,7 @@
#include <ch.h>
-#ifdef CH_USE_SERIAL_FULLDUPLEX
+#if CH_USE_SERIAL_FULLDUPLEX
/**
* @brief Initializes a generic full duplex driver.
* @details The HW dependent part of the initialization has to be performed
@@ -117,7 +117,7 @@ dflags_t chFDDGetAndClearFlags(FullDuplexDriver *sd) {
}
#endif /* CH_USE_SERIAL_FULLDUPLEX */
-#ifdef CH_USE_SERIAL_HALFDUPLEX
+#if CH_USE_SERIAL_HALFDUPLEX
/**
* @brief Initializes a generic half duplex driver.
* @details The HW dependent part of the initialization has to be performed
diff --git a/src/chsys.c b/src/chsys.c
index 49f4fd241..2b48278af 100644
--- a/src/chsys.c
+++ b/src/chsys.c
@@ -63,7 +63,7 @@ void chSysInit(void) {
scheduler_init();
debug_init();
vt_init();
-#ifdef CH_USE_HEAP
+#if CH_USE_HEAP
heap_init();
#endif
@@ -93,7 +93,7 @@ void chSysInit(void) {
*/
void chSysTimerHandlerI(void) {
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
/* running thread has not used up quantum yet? */
if (rlist.r_preempt > 0)
/* decrement remaining quantum */
@@ -102,7 +102,7 @@ void chSysTimerHandlerI(void) {
chVTDoTickI();
}
-#if defined(CH_USE_NESTED_LOCKS) && !defined(CH_OPTIMIZE_SPEED)
+#if CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED
void chSysLock(void) {
chDbgAssert(currp->p_locks >= 0, "chinit.c, chSysLock()");
@@ -116,6 +116,6 @@ void chSysUnlock(void) {
if (--currp->p_locks == 0)
port_unlock();
}
-#endif /* defined(CH_USE_NESTED_LOCKS) && !defined(CH_OPTIMIZE_SPEED) */
+#endif /* CH_USE_NESTED_LOCKS && !CH_OPTIMIZE_SPEED */
/** @} */
diff --git a/src/chthreads.c b/src/chthreads.c
index 24a7aa329..5b80687d6 100644
--- a/src/chthreads.c
+++ b/src/chthreads.c
@@ -34,28 +34,28 @@ Thread *init_thread(Thread *tp, tprio_t prio) {
tp->p_flags = P_MEM_MODE_STATIC;
tp->p_prio = prio;
tp->p_state = PRSUSPENDED;
-#ifdef CH_USE_NESTED_LOCKS
+#if CH_USE_NESTED_LOCKS
tp->p_locks = 0;
#endif
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
/* realprio is the thread's own, non-inherited, priority */
tp->p_realprio = prio;
tp->p_mtxlist = NULL;
#endif
-#ifdef CH_USE_WAITEXIT
+#if CH_USE_WAITEXIT
tp->p_waiting = NULL;
#endif
-#ifdef CH_USE_MESSAGES
+#if CH_USE_MESSAGES
queue_init(&tp->p_msgqueue);
#endif
-#ifdef CH_USE_EVENTS
+#if CH_USE_EVENTS
tp->p_epending = 0;
#endif
THREAD_EXT_INIT(tp);
return tp;
}
-#ifdef CH_USE_DEBUG
+#if CH_USE_DEBUG
static void memfill(uint8_t *p, uint32_t n, uint8_t v) {
while (n)
@@ -91,7 +91,7 @@ Thread *chThdInit(void *workspace, size_t wsize,
chDbgAssert((wsize >= THD_WA_SIZE(0)) && (prio <= HIGHPRIO) &&
(workspace != NULL) && (pf != NULL),
"chthreads.c, chThdInit()");
-#ifdef CH_USE_DEBUG
+#if CH_USE_DEBUG
memfill(workspace, wsize, MEM_FILL_PATTERN);
#endif
SETUP_CONTEXT(workspace, wsize, pf, arg);
@@ -119,7 +119,7 @@ Thread *chThdCreateStatic(void *workspace, size_t wsize,
return chThdResume(chThdInit(workspace, wsize, prio, pf, arg));
}
-#if defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_HEAP)
+#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_HEAP
/**
* @brief Creates a new thread allocating the memory from the heap.
*
@@ -150,9 +150,9 @@ Thread *chThdCreateFromHeap(size_t wsize, tprio_t prio,
tp->p_flags = P_MEM_MODE_HEAP;
return chThdResume(tp);
}
-#endif /* defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_HEAP) */
+#endif /* CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_HEAP */
-#if defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_MEMPOOLS)
+#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_MEMPOOLS
/**
* @brief Creates a new thread allocating the memory from the specified Memory
* Pool.
@@ -186,7 +186,7 @@ Thread *chThdCreateFromMemoryPool(MemoryPool *mp, tprio_t prio,
tp->p_mpool = mp;
return chThdResume(tp);
}
-#endif /* defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_MEMPOOLS) */
+#endif /* CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_MEMPOOLS */
/**
* @brief Changes the running thread priority then reschedules if necessary.
@@ -198,7 +198,7 @@ void chThdSetPriority(tprio_t newprio) {
chDbgAssert(newprio <= HIGHPRIO, "chthreads.c, chThdSetPriority()");
chSysLock();
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
if (currp->p_prio != currp->p_realprio) {
if (newprio > currp->p_prio)
currp->p_prio = newprio;
@@ -284,14 +284,14 @@ void chThdExit(msg_t msg) {
chSysLock();
tp->p_exitcode = msg;
THREAD_EXT_EXIT(tp);
-#ifdef CH_USE_WAITEXIT
+#if CH_USE_WAITEXIT
if (tp->p_waiting != NULL)
chSchReadyI(tp->p_waiting);
#endif
chSchGoSleepS(PREXIT);
}
-#ifdef CH_USE_WAITEXIT
+#if CH_USE_WAITEXIT
/**
* @brief Blocks the execution of the invoking thread until the specified
* thread terminates then the exit code is returned.
@@ -329,7 +329,7 @@ msg_t chThdWait(Thread *tp) {
chSchGoSleepS(PRWAIT);
}
msg = tp->p_exitcode;
-#ifndef CH_USE_DYNAMIC
+#if !CH_USE_DYNAMIC
chSysUnlock();
return msg;
#else /* CH_USE_DYNAMIC */
@@ -339,12 +339,12 @@ msg_t chThdWait(Thread *tp) {
chSysUnlock();
switch (mode) {
-#ifdef CH_USE_HEAP
+#if CH_USE_HEAP
case P_MEM_MODE_HEAP:
chHeapFree(tp);
break;
#endif
-#ifdef CH_USE_MEMPOOLS
+#if CH_USE_MEMPOOLS
case P_MEM_MODE_MEMPOOL:
chPoolFree(tp->p_mpool, tp);
break;
diff --git a/src/include/ch.h b/src/include/ch.h
index 374941e3e..8303d90f6 100644
--- a/src/include/ch.h
+++ b/src/include/ch.h
@@ -52,6 +52,16 @@
*/
#define CH_KERNEL_PATCH 0
+/*
+ * Common values.
+ */
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE (!FALSE)
+#endif
+
#include <chconf.h>
#include <chtypes.h>
#include "lists.h"
@@ -72,16 +82,6 @@
#include "serial.h"
#include "debug.h"
-/*
- * Common values.
- */
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-
#endif /* _CH_H_ */
/** @} */
diff --git a/src/include/condvars.h b/src/include/condvars.h
index a311ba526..90c78eccf 100644
--- a/src/include/condvars.h
+++ b/src/include/condvars.h
@@ -31,7 +31,7 @@
#ifndef _CONDVARS_H_
#define _CONDVARS_H_
-#if defined(CH_USE_CONDVARS) && defined(CH_USE_MUTEXES)
+#if CH_USE_CONDVARS && CH_USE_MUTEXES
/**
* @brief CondVar structure.
@@ -50,7 +50,7 @@ extern "C" {
void chCondBroadcastI(CondVar *cp);
msg_t chCondWait(CondVar *cp);
msg_t chCondWaitS(CondVar *cp);
-#ifdef CH_USE_CONDVARS_TIMEOUT
+#if CH_USE_CONDVARS_TIMEOUT
msg_t chCondWaitTimeout(CondVar *cp, systime_t time);
msg_t chCondWaitTimeoutS(CondVar *cp, systime_t time);
#endif
@@ -58,7 +58,7 @@ extern "C" {
}
#endif
-#endif /* defined(CH_USE_CONDVARS) && defined(CH_USE_MUTEXES) */
+#endif /* CH_USE_CONDVARS && CH_USE_MUTEXES */
#endif /* _CONDVARS_H_ */
diff --git a/src/include/debug.h b/src/include/debug.h
index a6b4ca7c1..37400d967 100644
--- a/src/include/debug.h
+++ b/src/include/debug.h
@@ -27,16 +27,21 @@
#ifndef _DEBUG_H_
#define _DEBUG_H_
-#ifdef CH_USE_DEBUG
+#if CH_USE_DEBUG
+/**
+ * @brief Trace buffer entries.
+ */
#ifndef TRACE_BUFFER_SIZE
#define TRACE_BUFFER_SIZE 64
#endif
/**
- * Fill value for threads working area in debug mode.
+ * @brief Fill value for threads working area in debug mode.
*/
+#ifndef MEM_FILL_PATTERN
#define MEM_FILL_PATTERN 0x55
+#endif
/**
* @brief Trace buffer record.
@@ -91,7 +96,7 @@ extern "C" {
#endif /* CH_USE_DEBUG */
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/src/include/events.h b/src/include/events.h
index 5def8f065..ada7812d1 100644
--- a/src/include/events.h
+++ b/src/include/events.h
@@ -27,7 +27,7 @@
#ifndef _EVENTS_H_
#define _EVENTS_H_
-#ifdef CH_USE_EVENTS
+#if CH_USE_EVENTS
/** All events allowed mask.*/
#define ALL_EVENTS -1
@@ -89,12 +89,12 @@ extern "C" {
void chEvtBroadcast(EventSource *esp);
void chEvtBroadcastI(EventSource *esp);
void chEvtDispatch(const evhandler_t handlers[], eventmask_t mask);
-#if defined(CH_OPTIMIZE_SPEED) || !defined(CH_USE_EVENTS_TIMEOUT)
+#if CH_OPTIMIZE_SPEED || !CH_USE_EVENTS_TIMEOUT
eventmask_t chEvtWaitOne(eventmask_t ewmask);
eventmask_t chEvtWaitAny(eventmask_t ewmask);
eventmask_t chEvtWaitAll(eventmask_t ewmask);
#endif
-#ifdef CH_USE_EVENTS_TIMEOUT
+#if CH_USE_EVENTS_TIMEOUT
eventmask_t chEvtWaitOneTimeout(eventmask_t ewmask, systime_t time);
eventmask_t chEvtWaitAnyTimeout(eventmask_t ewmask, systime_t time);
eventmask_t chEvtWaitAllTimeout(eventmask_t ewmask, systime_t time);
@@ -116,7 +116,7 @@ extern "C" {
*/
#define chEvtRegister(esp, elp, eid) chEvtRegisterMask(esp, elp, EVENT_MASK(eid))
-#if !defined(CH_OPTIMIZE_SPEED) && defined(CH_USE_EVENTS_TIMEOUT)
+#if !CH_OPTIMIZE_SPEED && CH_USE_EVENTS_TIMEOUT
#define chEvtWaitOne(ewmask) chEvtWaitOneTimeout(ewmask, TIME_INFINITE)
#define chEvtWaitAny(ewmask) chEvtWaitAnyTimeout(ewmask, TIME_INFINITE)
#define chEvtWaitAll(ewmask) chEvtWaitAllTimeout(ewmask, TIME_INFINITE)
diff --git a/src/include/inline.h b/src/include/inline.h
index 6f99ff329..0da909f8f 100644
--- a/src/include/inline.h
+++ b/src/include/inline.h
@@ -32,7 +32,7 @@
* Note: static inlined functions do not duplicate the code in every module
* this is true for GCC, not sure about other compilers.
*/
-#ifdef CH_OPTIMIZE_SPEED
+#if CH_OPTIMIZE_SPEED
static INLINE void prio_insert(Thread *tp, ThreadsQueue *tqp) {
Thread *cp = tqp->p_next;
diff --git a/src/include/lists.h b/src/include/lists.h
index a86d8175e..b858a7c69 100644
--- a/src/include/lists.h
+++ b/src/include/lists.h
@@ -63,7 +63,7 @@ typedef struct {
*/
#define list_init(tlp) ((tlp)->p_next = (Thread *)(tlp))
-#ifndef CH_OPTIMIZE_SPEED
+#if !CH_OPTIMIZE_SPEED
#ifdef __cplusplus
extern "C" {
@@ -79,7 +79,7 @@ extern "C" {
}
#endif
-#endif /* CH_OPTIMIZE_SPEED */
+#endif /* !CH_OPTIMIZE_SPEED */
#endif /* _LISTS_H_ */
diff --git a/src/include/mempools.h b/src/include/mempools.h
index 7bf67c77a..537ca3425 100644
--- a/src/include/mempools.h
+++ b/src/include/mempools.h
@@ -27,7 +27,7 @@
#ifndef _MEMPOOLS_H_
#define _MEMPOOLS_H_
-#ifdef CH_USE_MEMPOOLS
+#if CH_USE_MEMPOOLS
/**
* @brief Memory pool free object header.
diff --git a/src/include/messages.h b/src/include/messages.h
index c74febaf5..1c4876b81 100644
--- a/src/include/messages.h
+++ b/src/include/messages.h
@@ -27,7 +27,7 @@
#ifndef _MESSAGES_H_
#define _MESSAGES_H_
-#ifdef CH_USE_MESSAGES
+#if CH_USE_MESSAGES
/**
* Evaluates to TRUE if the thread has pending messages.
@@ -49,7 +49,7 @@ extern "C" {
msg_t chMsgGet(void);
void chMsgRelease(msg_t msg);
-#if defined(CH_USE_EVENTS) && defined(CH_USE_MESSAGES_EVENT)
+#if CH_USE_EVENTS && CH_USE_MESSAGES_EVENT
msg_t chMsgSendWithEvent(Thread *tp, msg_t msg, eventmask_t mask);
#endif
#ifdef __cplusplus
diff --git a/src/include/mutexes.h b/src/include/mutexes.h
index d3e987ddf..16b59f695 100644
--- a/src/include/mutexes.h
+++ b/src/include/mutexes.h
@@ -27,7 +27,7 @@
#ifndef _MUTEXES_H_
#define _MUTEXES_H_
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
/**
* @brief Mutex structure.
diff --git a/src/include/queues.h b/src/include/queues.h
index 418ff73a8..36495f1a7 100644
--- a/src/include/queues.h
+++ b/src/include/queues.h
@@ -41,7 +41,7 @@ typedef void (*qnotify_t)(void);
/** Returned by the queue functions if the queue is full. */
#define Q_FULL -4
-#ifdef CH_USE_QUEUES
+#if CH_USE_QUEUES
/**
* @brief I/O queue structure.
* @details This structure is used by both Input and Output Queues,
@@ -94,7 +94,7 @@ extern "C" {
msg_t chIQPutI(Queue *qp, uint8_t b);
msg_t chIQGet(Queue *qp);
size_t chIQRead(Queue *qp, uint8_t *buffer, size_t n);
-#ifdef CH_USE_QUEUES_TIMEOUT
+#if CH_USE_QUEUES_TIMEOUT
msg_t chIQGetTimeout(Queue *qp, systime_t time);
#endif
@@ -112,7 +112,7 @@ extern "C" {
#endif
#endif /* CH_USE_QUEUES */
-#ifdef CH_USE_QUEUES_HALFDUPLEX
+#if CH_USE_QUEUES_HALFDUPLEX
/**
* @brief Half duplex queue structure.
*/
@@ -163,7 +163,7 @@ extern "C" {
void chHDQPutTransmit(HalfDuplexQueue *qp, uint8_t b);
msg_t chHDQGetTransmitI(HalfDuplexQueue *qp);
msg_t chHDQPutReceiveI(HalfDuplexQueue *qp, uint8_t b);
-#ifdef CH_USE_QUEUES_TIMEOUT
+#if CH_USE_QUEUES_TIMEOUT
msg_t chHDQGetReceiveTimeout(HalfDuplexQueue *qp, systime_t time);
#endif
#ifdef __cplusplus
diff --git a/src/include/scheduler.h b/src/include/scheduler.h
index 25df4a3bd..612ee8c55 100644
--- a/src/include/scheduler.h
+++ b/src/include/scheduler.h
@@ -61,10 +61,10 @@ typedef struct {
tprio_t r_prio; /**< This field must be initialized to
zero.*/
/* End of the fields shared with the Thread structure. */
-#ifdef CH_USE_ROUNDROBIN
+#if CH_USE_ROUNDROBIN
cnt_t r_preempt; /**< Round robin counter.*/
#endif
-#ifndef CH_CURRP_REGISTER_CACHE
+#if !CH_CURRP_REGISTER_CACHE
Thread *r_current; /**< The currently running thread.*/
#endif
} ReadyList;
@@ -89,7 +89,7 @@ extern "C" {
}
#endif
-#ifdef CH_CURRP_REGISTER_CACHE
+#if CH_CURRP_REGISTER_CACHE
register Thread *currp asm(CH_CURRP_REGISTER_CACHE);
#else
#define currp rlist.r_current
diff --git a/src/include/semaphores.h b/src/include/semaphores.h
index bb25b4609..25f11b06b 100644
--- a/src/include/semaphores.h
+++ b/src/include/semaphores.h
@@ -27,7 +27,7 @@
#ifndef _SEMAPHORES_H_
#define _SEMAPHORES_H_
-#ifdef CH_USE_SEMAPHORES
+#if CH_USE_SEMAPHORES
/**
* @brief Semaphore structure.
@@ -46,13 +46,13 @@ extern "C" {
void chSemResetI(Semaphore *sp, cnt_t n);
msg_t chSemWait(Semaphore *sp);
msg_t chSemWaitS(Semaphore *sp);
-#ifdef CH_USE_SEMAPHORES_TIMEOUT
+#if CH_USE_SEMAPHORES_TIMEOUT
msg_t chSemWaitTimeout(Semaphore *sp, systime_t time);
msg_t chSemWaitTimeoutS(Semaphore *sp, systime_t time);
#endif
void chSemSignal(Semaphore *sp);
void chSemSignalI(Semaphore *sp);
-#ifdef CH_USE_SEMSW
+#if CH_USE_SEMSW
msg_t chSemSignalWait(Semaphore *sps, Semaphore *spw);
#endif
#ifdef __cplusplus
diff --git a/src/include/serial.h b/src/include/serial.h
index 6a6299cf3..ebb3392bb 100644
--- a/src/include/serial.h
+++ b/src/include/serial.h
@@ -45,7 +45,7 @@
/** Serial Driver condition flags type.*/
typedef uint16_t dflags_t;
-#ifdef CH_USE_SERIAL_FULLDUPLEX
+#if CH_USE_SERIAL_FULLDUPLEX
/**
* @brief Full Duplex Serial Driver main structure.
@@ -110,7 +110,7 @@ extern "C" {
#endif /* CH_USE_SERIAL_FULLDUPLEX */
-#ifdef CH_USE_SERIAL_HALFDUPLEX
+#if CH_USE_SERIAL_HALFDUPLEX
/**
* @brief Full Duplex Serial Driver main structure.
diff --git a/src/include/sys.h b/src/include/sys.h
index f559b5f52..ccc71ae7f 100644
--- a/src/include/sys.h
+++ b/src/include/sys.h
@@ -96,16 +96,16 @@
* a better idea to use the semaphores or mutexes instead.
* @see CH_USE_NESTED_LOCKS
*/
-#if defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
-#if defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
+#if CH_USE_NESTED_LOCKS || defined(__DOXYGEN__)
+#if CH_OPTIMIZE_SPEED || defined(__DOXYGEN__)
#define chSysLock() { \
if (currp->p_locks++ == 0) \
- port_lock(); \
+ port_lock(); \
}
-#endif /* defined(CH_OPTIMIZE_SPEED) */
-#else /* !defined(CH_USE_NESTED_LOCKS) */
+#endif /* CH_OPTIMIZE_SPEED */
+#else /* !CH_USE_NESTED_LOCKS */
#define chSysLock() port_lock()
-#endif /* !defined(CH_USE_NESTED_LOCKS) */
+#endif /* !CH_USE_NESTED_LOCKS */
/**
* @brief Leaves the kernel lock mode.
@@ -114,16 +114,16 @@
* a better idea to use the semaphores or mutexes instead.
* @see CH_USE_NESTED_LOCKS
*/
-#if defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
-#if defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
+#if CH_USE_NESTED_LOCKS || defined(__DOXYGEN__)
+#if CH_OPTIMIZE_SPEED || defined(__DOXYGEN__)
#define chSysUnlock() { \
if (--currp->p_locks == 0) \
- port_unlock(); \
+ port_unlock(); \
}
-#endif /* defined(CH_OPTIMIZE_SPEED) */
-#else /* !defined(CH_USE_NESTED_LOCKS) */
+#endif /* CH_OPTIMIZE_SPEED */
+#else /* !CH_USE_NESTED_LOCKS */
#define chSysUnlock() port_unlock()
-#endif /* !defined(CH_USE_NESTED_LOCKS) */
+#endif /* !CH_USE_NESTED_LOCKS */
/**
* @brief Enters the kernel lock mode from within an interrupt handler.
diff --git a/src/include/threads.h b/src/include/threads.h
index c3f89d99b..3c279bf3c 100644
--- a/src/include/threads.h
+++ b/src/include/threads.h
@@ -47,7 +47,7 @@ struct Thread {
tstate_t p_state; /**< Current thread state.*/
tmode_t p_flags; /**< Various flags.*/
struct context p_ctx; /**< Processor context.*/
-#ifdef CH_USE_NESTED_LOCKS
+#if CH_USE_NESTED_LOCKS
cnt_t p_locks; /**< Number of nested locks.*/
#endif
/*
@@ -59,27 +59,27 @@ struct Thread {
msg_t p_rdymsg; /**< Thread wakeup code.*/
msg_t p_exitcode; /**< The thread exit code
(@p PREXIT state).*/
-#ifdef CH_USE_SEMAPHORES
+#if CH_USE_SEMAPHORES
Semaphore *p_wtsemp; /**< Semaphore where the thread is
waiting on (@p PRWTSEM state).*/
#endif
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
Mutex *p_wtmtxp; /**< Mutex where the thread is waiting
on (@p PRWTMTX state).*/
#endif
-#ifdef CH_USE_CONDVARS
+#if CH_USE_CONDVARS
CondVar *p_wtcondp; /**< CondVar where the thread is
waiting on (@p PRWTCOND state).*/
#endif
-#ifdef CH_USE_MESSAGES
+#if CH_USE_MESSAGES
Thread *p_wtthdp; /**< Destination thread for message
send @p PRSNDMSG state).*/
#endif
-#ifdef CH_USE_EVENTS
+#if CH_USE_EVENTS
eventmask_t p_ewmask; /**< Enabled events mask (@p PRWTOREVT
or @p PRWTANDEVT states).*/
#endif
-#ifdef CH_USE_TRACE
+#if CH_USE_TRACE
void *p_wtobjp; /**< Generic kernel object pointer used
for opaque access.*/
#endif
@@ -87,23 +87,23 @@ struct Thread {
/*
* Start of the optional fields.
*/
-#ifdef CH_USE_WAITEXIT
+#if CH_USE_WAITEXIT
Thread *p_waiting; /**< Thread waiting for termination.*/
#endif
-#ifdef CH_USE_MESSAGES
+#if CH_USE_MESSAGES
ThreadsQueue p_msgqueue; /**< Message queue.*/
msg_t p_msg; /**< The message.*/
#endif
-#ifdef CH_USE_EVENTS
+#if CH_USE_EVENTS
eventmask_t p_epending; /**< Pending events mask.*/
#endif
-#ifdef CH_USE_MUTEXES
+#if CH_USE_MUTEXES
Mutex *p_mtxlist; /**< List of the mutexes owned by this
thread, @p NULL terminated.*/
tprio_t p_realprio; /**< Thread's own, non-inherited,
priority.*/
#endif
-#if defined(CH_USE_DYNAMIC) && defined(CH_USE_MEMPOOLS)
+#if CH_USE_DYNAMIC && CH_USE_MEMPOOLS
void *p_mpool; /**< Memory Pool where the thread
workspace is returned.*/
#endif
@@ -164,11 +164,11 @@ extern "C" {
tprio_t prio, tfunc_t pf, void *arg);
Thread *chThdCreateStatic(void *workspace, size_t wsize,
tprio_t prio, tfunc_t pf, void *arg);
-#if defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_HEAP)
+#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_HEAP
Thread *chThdCreateFromHeap(size_t wsize, tprio_t prio,
tfunc_t pf, void *arg);
#endif
-#if defined(CH_USE_DYNAMIC) && defined(CH_USE_WAITEXIT) && defined(CH_USE_MEMPOOLS)
+#if CH_USE_DYNAMIC && CH_USE_WAITEXIT && CH_USE_MEMPOOLS
Thread *chThdCreateFromMemoryPool(MemoryPool *mp, tprio_t prio,
tfunc_t pf, void *arg);
#endif
@@ -178,7 +178,7 @@ extern "C" {
void chThdSleep(systime_t time);
void chThdSleepUntil(systime_t time);
void chThdExit(msg_t msg);
-#ifdef CH_USE_WAITEXIT
+#if CH_USE_WAITEXIT
msg_t chThdWait(Thread *tp);
#endif
#ifdef __cplusplus
diff --git a/src/templates/chconf.h b/src/templates/chconf.h
index 8863b0061..f05f8b0b5 100644
--- a/src/templates/chconf.h
+++ b/src/templates/chconf.h
@@ -27,17 +27,15 @@
#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.
*/
-#define CH_OPTIMIZE_SPEED
+#ifndef CH_OPTIMIZE_SPEED
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
/**
* If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
@@ -46,135 +44,195 @@
* 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.
*/
-#define CH_USE_NESTED_LOCKS
+#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 ON.
+ * @note The default is @p TRUE.
*/
-#define CH_USE_ROUNDROBIN
+#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.
*/
-#define CH_USE_WAITEXIT
+#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.
*/
-#define CH_USE_SEMAPHORES
+#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 recommended default is OFF unless you have some specific
- * requirements.
+ * @note The default is @p FALSE. Enable this if you have special requirements.
* @note Requires @p CH_USE_SEMAPHORES.
*/
-#define CH_USE_SEMAPHORES_PRIORITY
+#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.
*/
-#define CH_USE_SEMSW
+#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.
*/
-#define CH_USE_SEMAPHORES_TIMEOUT
+#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.
*/
-#define CH_USE_MUTEXES
+#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.
*/
-#define CH_USE_CONDVARS
+#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.
*/
-#define CH_USE_CONDVARS_TIMEOUT
+#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.
*/
-#define CH_USE_EVENTS
+#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.
*/
-#define CH_USE_EVENTS_TIMEOUT
+#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.
*/
-#define CH_USE_MESSAGES
+#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.
*/
-#define CH_USE_MESSAGES_EVENT
+#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.
*/
-#define CH_USE_MESSAGES_PRIORITY
+#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.
*/
-#define CH_USE_QUEUES
+#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.
*/
-#define CH_USE_QUEUES_HALFDUPLEX
+#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.
*/
-#define CH_USE_QUEUES_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.
*/
-#define CH_USE_SERIAL_FULLDUPLEX
+#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.
*/
-#define CH_USE_SERIAL_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.
*/
-#define CH_USE_HEAP
+#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
@@ -183,41 +241,55 @@
* 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
/**
* 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.
- * @note The recommended setting is OFF.
*/
-#define CH_USE_MALLOC_HEAP
+#ifndef CH_USE_MALLOC_HEAP
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
/**
* If specified then the memory pools allocator APIs are included in the
* kernel.
+ * @note The default is @p TRUE.
*/
-#define CH_USE_MEMPOOLS
+#ifndef CH_USE_MEMPOOLS
+#define CH_USE_MEMPOOLS TRUE
+#endif
/**
* If specified then the dynamic threads creation APIs are included in the
* kernel.
+ * @note The default is @p TRUE.
* @note Requires @p CH_USE_WAITEXIT.
*/
-#define CH_USE_DYNAMIC
+#ifndef CH_USE_DYNAMIC
+#define CH_USE_DYNAMIC TRUE
+#endif
/**
* Frequency of the system timer that drives the system ticks. This also
* defines the system tick time unit.
*/
-#define CH_FREQUENCY 1000
+#ifndef CH_FREQUENCY
+#define CH_FREQUENCY 1000
+#endif
/**
* 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.
*/
-#define CH_TIME_QUANTUM 20
+#ifndef CH_TIME_QUANTUM
+#define CH_TIME_QUANTUM 20
+#endif
/**
* If enabled defines a CPU register to be used as storage for the global
@@ -230,44 +302,70 @@
* @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, 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.
+ * @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.
*/
+#ifndef THREAD_EXT_FIELDS
#define THREAD_EXT_FIELDS \
struct { \
/* Add thread custom fields here.*/ \
};
+#endif
/**
* 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.
*/
+#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_ */