/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
/**
* @addtogroup Config
* @{
*/
#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.
* For performance and code size reasons the recommended setting is leave
* this option disabled.
* 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 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.
* @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.
*/
#define CH_HEAP_SIZE 0
/** 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
/** Configuration option: if specified then the memory pools allocator APIs
* are included in the kernel.*/
#define CH_USE_MEMPOOLS
/** Configuration option: if specified then the dynamic objects creation APIs
* are included in the kernel.
* @note requires \p CH_USE_WAITEXIT.
*/
#define CH_USE_DYNAMIC
/** Configuration option: Frequency of the system timer that drives the system
* ticks. This also defines the system time unit.*/
#define CH_FREQUENCY 1000
/** 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
/** 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 must be recompiled with the GCC option \p
* -ffixed-.
*/
//#define CH_CURRP_REGISTER_CACHE "r7"
/** 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.
*/
//#define CH_USE_DEBUG
/** Debug option: Includes the threads context switch tracing feature.
*/
//#define CH_USE_TRACE
/** User fields added to the end of the \p Thread structure. */
#define THREAD_EXT_FIELDS \
struct { \
/* Add thread custom fields here.*/ \
};
/** User initialization code added to the \p chThdCreate() API.
* @note It is invoked from within \p chThdInit(). */
#define THREAD_EXT_INIT(tp) { \
/* Add thread initialization code here.*/ \
}
/** User finalization code added to the \p chThdExit() API.
* @note It is inserted into lock zone. */
#define THREAD_EXT_EXIT(tp) { \
/* Add thread finalization code here.*/ \
}
#endif /* _CHCONF_H_ */
/** @} */