Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 7 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /* |
1 | /* |
| 2 | ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, |
2 | ChibiOS - Copyright (C) 2006..2017 Giovanni Di Sirio |
| 3 | 2011,2012 Giovanni Di Sirio. |
- | |
| 4 | 3 | ||
| 5 | This file is part of ChibiOS/RT. |
- | |
| 6 | - | ||
| 7 | ChibiOS/RT is free software; you can redistribute it and/or modify |
- | |
| 8 | it under the terms of the GNU General Public License as published by |
4 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 9 | the Free Software Foundation; either version 3 of the License, or |
5 | you may not use this file except in compliance with the License. |
| 10 | (at your option) any later version. |
6 | You may obtain a copy of the License at |
| 11 | 7 | ||
| 12 | ChibiOS/RT is distributed in the hope that it will be useful, |
- | |
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
- | |
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
- | |
| 15 | GNU General Public License for more details. |
8 | http://www.apache.org/licenses/LICENSE-2.0 |
| 16 | 9 | ||
| 17 | You should have received a copy of the GNU General Public License |
10 | Unless required by applicable law or agreed to in writing, software |
| 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
- | |
| 19 | - | ||
| 20 | --- |
- | |
| 21 | - | ||
| 22 | A special exception to the GPL can be applied should you wish to distribute |
11 | distributed under the License is distributed on an "AS IS" BASIS, |
| 23 | a combined work that includes ChibiOS/RT, without being obliged to provide |
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 24 | the source code for any proprietary components. See the file exception.txt |
13 | See the License for the specific language governing permissions and |
| 25 | for full details of how and when the exception can be applied. |
14 | limitations under the License. |
| 26 | */ |
15 | */ |
| 27 | 16 | ||
| 28 | /** |
17 | /** |
| 29 | * @file templates/chconf.h |
18 | * @file templates/chconf.h |
| 30 | * @brief Configuration file template. |
19 | * @brief Configuration file template. |
| Line 34... | Line 23... | ||
| 34 | * @addtogroup config |
23 | * @addtogroup config |
| 35 | * @details Kernel related settings and hooks. |
24 | * @details Kernel related settings and hooks. |
| 36 | * @{ |
25 | * @{ |
| 37 | */ |
26 | */ |
| 38 | 27 | ||
| 39 | #ifndef _CHCONF_H_ |
28 | #ifndef CHCONF_H |
| 40 | #define _CHCONF_H_ |
29 | #define CHCONF_H |
| - | 30 | ||
| - | 31 | #define _CHIBIOS_RT_CONF_ |
|
| - | 32 | #define _CHIBIOS_RT_CONF_VER_5_0_ |
|
| 41 | 33 | ||
| 42 | /*===========================================================================*/ |
34 | /*===========================================================================*/ |
| 43 | /** |
35 | /** |
| 44 | * @name Kernel parameters and options |
36 | * @name System timers settings |
| 45 | * @{ |
37 | * @{ |
| 46 | */ |
38 | */ |
| 47 | /*===========================================================================*/ |
39 | /*===========================================================================*/ |
| 48 | 40 | ||
| 49 | /** |
41 | /** |
| - | 42 | * @brief System time counter resolution. |
|
| - | 43 | * @note Allowed values are 16 or 32 bits. |
|
| - | 44 | */ |
|
| - | 45 | #define CH_CFG_ST_RESOLUTION 16 |
|
| - | 46 | ||
| - | 47 | /** |
|
| 50 | * @brief System tick frequency. |
48 | * @brief System tick frequency. |
| 51 | * @details Frequency of the system timer that drives the system ticks. This |
49 | * @details Frequency of the system timer that drives the system ticks. This |
| 52 | * setting also defines the system tick time unit. |
50 | * setting also defines the system tick time unit. |
| 53 | */ |
51 | */ |
| 54 | #if !defined(CH_FREQUENCY) || defined(__DOXYGEN__) |
52 | #define CH_CFG_ST_FREQUENCY 10000 |
| - | 53 | ||
| - | 54 | /** |
|
| - | 55 | * @brief Time intervals data size. |
|
| - | 56 | * @note Allowed values are 16, 32 or 64 bits. |
|
| - | 57 | */ |
|
| - | 58 | #define CH_CFG_INTERVALS_SIZE 32 |
|
| - | 59 | ||
| - | 60 | /** |
|
| - | 61 | * @brief Time types data size. |
|
| - | 62 | * @note Allowed values are 16 or 32 bits. |
|
| - | 63 | */ |
|
| - | 64 | #define CH_CFG_TIME_TYPES_SIZE 32 |
|
| - | 65 | ||
| - | 66 | /** |
|
| - | 67 | * @brief Time delta constant for the tick-less mode. |
|
| - | 68 | * @note If this value is zero then the system uses the classic |
|
| - | 69 | * periodic tick. This value represents the minimum number |
|
| - | 70 | * of ticks that is safe to specify in a timeout directive. |
|
| - | 71 | * The value one is not valid, timeouts are rounded up to |
|
| - | 72 | * this value. |
|
| - | 73 | */ |
|
| 55 | #define CH_FREQUENCY 1000 |
74 | #define CH_CFG_ST_TIMEDELTA 2 |
| - | 75 | ||
| - | 76 | /** @} */ |
|
| - | 77 | ||
| - | 78 | /*===========================================================================*/ |
|
| - | 79 | /** |
|
| - | 80 | * @name Kernel parameters and options |
|
| 56 | #endif |
81 | * @{ |
| - | 82 | */ |
|
| - | 83 | /*===========================================================================*/ |
|
| 57 | 84 | ||
| 58 | /** |
85 | /** |
| 59 | * @brief Round robin interval. |
86 | * @brief Round robin interval. |
| 60 | * @details This constant is the number of system ticks allowed for the |
87 | * @details This constant is the number of system ticks allowed for the |
| 61 | * threads before preemption occurs. Setting this value to zero |
88 | * threads before preemption occurs. Setting this value to zero |
| 62 | * disables the preemption for threads with equal priority and the |
89 | * disables the preemption for threads with equal priority and the |
| 63 | * round robin becomes cooperative. Note that higher priority |
90 | * round robin becomes cooperative. Note that higher priority |
| 64 | * threads can still preempt, the kernel is always preemptive. |
91 | * threads can still preempt, the kernel is always preemptive. |
| 65 | * |
- | |
| 66 | * @note Disabling the round robin preemption makes the kernel more compact |
92 | * @note Disabling the round robin preemption makes the kernel more compact |
| 67 | * and generally faster. |
93 | * and generally faster. |
| - | 94 | * @note The round robin preemption is not supported in tickless mode and |
|
| - | 95 | * must be set to zero in that case. |
|
| 68 | */ |
96 | */ |
| 69 | #if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__) |
- | |
| 70 | #define CH_TIME_QUANTUM 20 |
97 | #define CH_CFG_TIME_QUANTUM 0 |
| 71 | #endif |
- | |
| 72 | 98 | ||
| 73 | /** |
99 | /** |
| 74 | * @brief Managed RAM size. |
100 | * @brief Managed RAM size. |
| 75 | * @details Size of the RAM area to be managed by the OS. If set to zero |
101 | * @details Size of the RAM area to be managed by the OS. If set to zero |
| 76 | * then the whole available RAM is used. The core memory is made |
102 | * then the whole available RAM is used. The core memory is made |
| 77 | * available to the heap allocator and/or can be used directly through |
103 | * available to the heap allocator and/or can be used directly through |
| 78 | * the simplified core memory allocator. |
104 | * the simplified core memory allocator. |
| 79 | * |
105 | * |
| 80 | * @note In order to let the OS manage the whole RAM the linker script must |
106 | * @note In order to let the OS manage the whole RAM the linker script must |
| 81 | * provide the @p __heap_base__ and @p __heap_end__ symbols. |
107 | * provide the @p __heap_base__ and @p __heap_end__ symbols. |
| 82 | * @note Requires @p CH_USE_MEMCORE. |
108 | * @note Requires @p CH_CFG_USE_MEMCORE. |
| 83 | */ |
109 | */ |
| 84 | #if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__) |
- | |
| 85 | #define CH_MEMCORE_SIZE 0 |
110 | #define CH_CFG_MEMCORE_SIZE 0 |
| 86 | #endif |
- | |
| 87 | 111 | ||
| 88 | /** |
112 | /** |
| 89 | * @brief Idle thread automatic spawn suppression. |
113 | * @brief Idle thread automatic spawn suppression. |
| 90 | * @details When this option is activated the function @p chSysInit() |
114 | * @details When this option is activated the function @p chSysInit() |
| 91 | * does not spawn the idle thread automatically. The application has |
115 | * does not spawn the idle thread. The application @p main() |
| 92 | * then the responsibility to do one of the following: |
- | |
| 93 | * - Spawn a custom idle thread at priority @p IDLEPRIO. |
116 | * function becomes the idle thread and must implement an |
| 94 | * - Change the main() thread priority to @p IDLEPRIO then enter |
- | |
| 95 | * an endless loop. In this scenario the @p main() thread acts as |
- | |
| 96 | * the idle thread. |
117 | * infinite loop. |
| 97 | * . |
- | |
| 98 | * @note Unless an idle thread is spawned the @p main() thread must not |
- | |
| 99 | * enter a sleep state. |
- | |
| 100 | */ |
118 | */ |
| 101 | #if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__) |
- | |
| 102 | #define CH_NO_IDLE_THREAD FALSE |
119 | #define CH_CFG_NO_IDLE_THREAD FALSE |
| 103 | #endif |
- | |
| 104 | 120 | ||
| 105 | /** @} */ |
121 | /** @} */ |
| 106 | 122 | ||
| 107 | /*===========================================================================*/ |
123 | /*===========================================================================*/ |
| 108 | /** |
124 | /** |
| Line 117... | Line 133... | ||
| 117 | * is used when two possible implementations exist. |
133 | * is used when two possible implementations exist. |
| 118 | * |
134 | * |
| 119 | * @note This is not related to the compiler optimization options. |
135 | * @note This is not related to the compiler optimization options. |
| 120 | * @note The default is @p TRUE. |
136 | * @note The default is @p TRUE. |
| 121 | */ |
137 | */ |
| 122 | #if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__) |
- | |
| 123 | #define CH_OPTIMIZE_SPEED TRUE |
138 | #define CH_CFG_OPTIMIZE_SPEED TRUE |
| 124 | #endif |
- | |
| 125 | 139 | ||
| 126 | /** @} */ |
140 | /** @} */ |
| 127 | 141 | ||
| 128 | /*===========================================================================*/ |
142 | /*===========================================================================*/ |
| 129 | /** |
143 | /** |
| Line 131... | Line 145... | ||
| 131 | * @{ |
145 | * @{ |
| 132 | */ |
146 | */ |
| 133 | /*===========================================================================*/ |
147 | /*===========================================================================*/ |
| 134 | 148 | ||
| 135 | /** |
149 | /** |
| - | 150 | * @brief Time Measurement APIs. |
|
| - | 151 | * @details If enabled then the time measurement APIs are included in |
|
| - | 152 | * the kernel. |
|
| - | 153 | * |
|
| - | 154 | * @note The default is @p TRUE. |
|
| - | 155 | */ |
|
| - | 156 | #define CH_CFG_USE_TM TRUE |
|
| - | 157 | ||
| - | 158 | /** |
|
| 136 | * @brief Threads registry APIs. |
159 | * @brief Threads registry APIs. |
| 137 | * @details If enabled then the registry APIs are included in the kernel. |
160 | * @details If enabled then the registry APIs are included in the kernel. |
| 138 | * |
161 | * |
| 139 | * @note The default is @p TRUE. |
162 | * @note The default is @p TRUE. |
| 140 | */ |
163 | */ |
| 141 | #if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__) |
- | |
| 142 | #define CH_USE_REGISTRY TRUE |
164 | #define CH_CFG_USE_REGISTRY TRUE |
| 143 | #endif |
- | |
| 144 | 165 | ||
| 145 | /** |
166 | /** |
| 146 | * @brief Threads synchronization APIs. |
167 | * @brief Threads synchronization APIs. |
| 147 | * @details If enabled then the @p chThdWait() function is included in |
168 | * @details If enabled then the @p chThdWait() function is included in |
| 148 | * the kernel. |
169 | * the kernel. |
| 149 | * |
170 | * |
| 150 | * @note The default is @p TRUE. |
171 | * @note The default is @p TRUE. |
| 151 | */ |
172 | */ |
| 152 | #if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__) |
- | |
| 153 | #define CH_USE_WAITEXIT TRUE |
173 | #define CH_CFG_USE_WAITEXIT TRUE |
| 154 | #endif |
- | |
| 155 | 174 | ||
| 156 | /** |
175 | /** |
| 157 | * @brief Semaphores APIs. |
176 | * @brief Semaphores APIs. |
| 158 | * @details If enabled then the Semaphores APIs are included in the kernel. |
177 | * @details If enabled then the Semaphores APIs are included in the kernel. |
| 159 | * |
178 | * |
| 160 | * @note The default is @p TRUE. |
179 | * @note The default is @p TRUE. |
| 161 | */ |
180 | */ |
| 162 | #if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__) |
- | |
| 163 | #define CH_USE_SEMAPHORES TRUE |
181 | #define CH_CFG_USE_SEMAPHORES TRUE |
| 164 | #endif |
- | |
| 165 | 182 | ||
| 166 | /** |
183 | /** |
| 167 | * @brief Semaphores queuing mode. |
184 | * @brief Semaphores queuing mode. |
| 168 | * @details If enabled then the threads are enqueued on semaphores by |
185 | * @details If enabled then the threads are enqueued on semaphores by |
| 169 | * priority rather than in FIFO order. |
186 | * priority rather than in FIFO order. |
| 170 | * |
187 | * |
| 171 | * @note The default is @p FALSE. Enable this if you have special requirements. |
188 | * @note The default is @p FALSE. Enable this if you have special |
| - | 189 | * requirements. |
|
| 172 | * @note Requires @p CH_USE_SEMAPHORES. |
190 | * @note Requires @p CH_CFG_USE_SEMAPHORES. |
| 173 | */ |
191 | */ |
| 174 | #if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__) |
- | |
| 175 | #define CH_USE_SEMAPHORES_PRIORITY FALSE |
192 | #define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE |
| 176 | #endif |
- | |
| 177 | 193 | ||
| 178 | /** |
194 | /** |
| 179 | * @brief Atomic semaphore API. |
195 | * @brief Mutexes APIs. |
| 180 | * @details If enabled then the semaphores the @p chSemSignalWait() API |
196 | * @details If enabled then the mutexes APIs are included in the kernel. |
| 181 | * is included in the kernel. |
- | |
| 182 | * |
197 | * |
| 183 | * @note The default is @p TRUE. |
198 | * @note The default is @p TRUE. |
| 184 | * @note Requires @p CH_USE_SEMAPHORES. |
- | |
| 185 | */ |
199 | */ |
| 186 | #if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__) |
- | |
| 187 | #define CH_USE_SEMSW TRUE |
200 | #define CH_CFG_USE_MUTEXES TRUE |
| 188 | #endif |
- | |
| 189 | 201 | ||
| 190 | /** |
202 | /** |
| 191 | * @brief Mutexes APIs. |
203 | * @brief Enables recursive behavior on mutexes. |
| 192 | * @details If enabled then the mutexes APIs are included in the kernel. |
204 | * @note Recursive mutexes are heavier and have an increased |
| - | 205 | * memory footprint. |
|
| 193 | * |
206 | * |
| 194 | * @note The default is @p TRUE. |
207 | * @note The default is @p FALSE. |
| - | 208 | * @note Requires @p CH_CFG_USE_MUTEXES. |
|
| 195 | */ |
209 | */ |
| 196 | #if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__) |
- | |
| 197 | #define CH_USE_MUTEXES TRUE |
210 | #define CH_CFG_USE_MUTEXES_RECURSIVE FALSE |
| 198 | #endif |
- | |
| 199 | 211 | ||
| 200 | /** |
212 | /** |
| 201 | * @brief Conditional Variables APIs. |
213 | * @brief Conditional Variables APIs. |
| 202 | * @details If enabled then the conditional variables APIs are included |
214 | * @details If enabled then the conditional variables APIs are included |
| 203 | * in the kernel. |
215 | * in the kernel. |
| 204 | * |
216 | * |
| 205 | * @note The default is @p TRUE. |
217 | * @note The default is @p TRUE. |
| 206 | * @note Requires @p CH_USE_MUTEXES. |
218 | * @note Requires @p CH_CFG_USE_MUTEXES. |
| 207 | */ |
219 | */ |
| 208 | #if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__) |
- | |
| 209 | #define CH_USE_CONDVARS TRUE |
220 | #define CH_CFG_USE_CONDVARS TRUE |
| 210 | #endif |
- | |
| 211 | 221 | ||
| 212 | /** |
222 | /** |
| 213 | * @brief Conditional Variables APIs with timeout. |
223 | * @brief Conditional Variables APIs with timeout. |
| 214 | * @details If enabled then the conditional variables APIs with timeout |
224 | * @details If enabled then the conditional variables APIs with timeout |
| 215 | * specification are included in the kernel. |
225 | * specification are included in the kernel. |
| 216 | * |
226 | * |
| 217 | * @note The default is @p TRUE. |
227 | * @note The default is @p TRUE. |
| 218 | * @note Requires @p CH_USE_CONDVARS. |
228 | * @note Requires @p CH_CFG_USE_CONDVARS. |
| 219 | */ |
229 | */ |
| 220 | #if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__) |
- | |
| 221 | #define CH_USE_CONDVARS_TIMEOUT TRUE |
230 | #define CH_CFG_USE_CONDVARS_TIMEOUT TRUE |
| 222 | #endif |
- | |
| 223 | 231 | ||
| 224 | /** |
232 | /** |
| 225 | * @brief Events Flags APIs. |
233 | * @brief Events Flags APIs. |
| 226 | * @details If enabled then the event flags APIs are included in the kernel. |
234 | * @details If enabled then the event flags APIs are included in the kernel. |
| 227 | * |
235 | * |
| 228 | * @note The default is @p TRUE. |
236 | * @note The default is @p TRUE. |
| 229 | */ |
237 | */ |
| 230 | #if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__) |
- | |
| 231 | #define CH_USE_EVENTS TRUE |
238 | #define CH_CFG_USE_EVENTS TRUE |
| 232 | #endif |
- | |
| 233 | 239 | ||
| 234 | /** |
240 | /** |
| 235 | * @brief Events Flags APIs with timeout. |
241 | * @brief Events Flags APIs with timeout. |
| 236 | * @details If enabled then the events APIs with timeout specification |
242 | * @details If enabled then the events APIs with timeout specification |
| 237 | * are included in the kernel. |
243 | * are included in the kernel. |
| 238 | * |
244 | * |
| 239 | * @note The default is @p TRUE. |
245 | * @note The default is @p TRUE. |
| 240 | * @note Requires @p CH_USE_EVENTS. |
246 | * @note Requires @p CH_CFG_USE_EVENTS. |
| 241 | */ |
247 | */ |
| 242 | #if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__) |
- | |
| 243 | #define CH_USE_EVENTS_TIMEOUT TRUE |
248 | #define CH_CFG_USE_EVENTS_TIMEOUT TRUE |
| 244 | #endif |
- | |
| 245 | 249 | ||
| 246 | /** |
250 | /** |
| 247 | * @brief Synchronous Messages APIs. |
251 | * @brief Synchronous Messages APIs. |
| 248 | * @details If enabled then the synchronous messages APIs are included |
252 | * @details If enabled then the synchronous messages APIs are included |
| 249 | * in the kernel. |
253 | * in the kernel. |
| 250 | * |
254 | * |
| 251 | * @note The default is @p TRUE. |
255 | * @note The default is @p TRUE. |
| 252 | */ |
256 | */ |
| 253 | #if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__) |
- | |
| 254 | #define CH_USE_MESSAGES TRUE |
257 | #define CH_CFG_USE_MESSAGES TRUE |
| 255 | #endif |
- | |
| 256 | 258 | ||
| 257 | /** |
259 | /** |
| 258 | * @brief Synchronous Messages queuing mode. |
260 | * @brief Synchronous Messages queuing mode. |
| 259 | * @details If enabled then messages are served by priority rather than in |
261 | * @details If enabled then messages are served by priority rather than in |
| 260 | * FIFO order. |
262 | * FIFO order. |
| 261 | * |
263 | * |
| 262 | * @note The default is @p FALSE. Enable this if you have special requirements. |
264 | * @note The default is @p FALSE. Enable this if you have special |
| - | 265 | * requirements. |
|
| 263 | * @note Requires @p CH_USE_MESSAGES. |
266 | * @note Requires @p CH_CFG_USE_MESSAGES. |
| 264 | */ |
267 | */ |
| 265 | #if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__) |
- | |
| 266 | #define CH_USE_MESSAGES_PRIORITY FALSE |
268 | #define CH_CFG_USE_MESSAGES_PRIORITY FALSE |
| 267 | #endif |
- | |
| 268 | 269 | ||
| 269 | /** |
270 | /** |
| 270 | * @brief Mailboxes APIs. |
271 | * @brief Mailboxes APIs. |
| 271 | * @details If enabled then the asynchronous messages (mailboxes) APIs are |
272 | * @details If enabled then the asynchronous messages (mailboxes) APIs are |
| 272 | * included in the kernel. |
273 | * included in the kernel. |
| 273 | * |
274 | * |
| 274 | * @note The default is @p TRUE. |
275 | * @note The default is @p TRUE. |
| 275 | * @note Requires @p CH_USE_SEMAPHORES. |
276 | * @note Requires @p CH_CFG_USE_SEMAPHORES. |
| 276 | */ |
- | |
| 277 | #if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__) |
- | |
| 278 | #define CH_USE_MAILBOXES TRUE |
- | |
| 279 | #endif |
- | |
| 280 | - | ||
| 281 | /** |
- | |
| 282 | * @brief I/O Queues APIs. |
- | |
| 283 | * @details If enabled then the I/O queues APIs are included in the kernel. |
- | |
| 284 | * |
- | |
| 285 | * @note The default is @p TRUE. |
- | |
| 286 | */ |
277 | */ |
| 287 | #if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__) |
- | |
| 288 | #define CH_USE_QUEUES TRUE |
278 | #define CH_CFG_USE_MAILBOXES TRUE |
| 289 | #endif |
- | |
| 290 | 279 | ||
| 291 | /** |
280 | /** |
| 292 | * @brief Core Memory Manager APIs. |
281 | * @brief Core Memory Manager APIs. |
| 293 | * @details If enabled then the core memory manager APIs are included |
282 | * @details If enabled then the core memory manager APIs are included |
| 294 | * in the kernel. |
283 | * in the kernel. |
| 295 | * |
284 | * |
| 296 | * @note The default is @p TRUE. |
285 | * @note The default is @p TRUE. |
| 297 | */ |
286 | */ |
| 298 | #if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__) |
- | |
| 299 | #define CH_USE_MEMCORE TRUE |
287 | #define CH_CFG_USE_MEMCORE TRUE |
| 300 | #endif |
- | |
| 301 | 288 | ||
| 302 | /** |
289 | /** |
| 303 | * @brief Heap Allocator APIs. |
290 | * @brief Heap Allocator APIs. |
| 304 | * @details If enabled then the memory heap allocator APIs are included |
291 | * @details If enabled then the memory heap allocator APIs are included |
| 305 | * in the kernel. |
292 | * in the kernel. |
| 306 | * |
293 | * |
| 307 | * @note The default is @p TRUE. |
294 | * @note The default is @p TRUE. |
| 308 | * @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or |
295 | * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or |
| 309 | * @p CH_USE_SEMAPHORES. |
296 | * @p CH_CFG_USE_SEMAPHORES. |
| 310 | * @note Mutexes are recommended. |
297 | * @note Mutexes are recommended. |
| 311 | */ |
298 | */ |
| 312 | #if !defined(CH_USE_HEAP) || defined(__DOXYGEN__) |
- | |
| 313 | #define CH_USE_HEAP TRUE |
299 | #define CH_CFG_USE_HEAP TRUE |
| 314 | #endif |
- | |
| 315 | 300 | ||
| 316 | /** |
301 | /** |
| 317 | * @brief C-runtime allocator. |
302 | * @brief Memory Pools Allocator APIs. |
| 318 | * @details If enabled the the heap allocator APIs just wrap the C-runtime |
303 | * @details If enabled then the memory pools allocator APIs are included |
| 319 | * @p malloc() and @p free() functions. |
304 | * in the kernel. |
| 320 | * |
305 | * |
| 321 | * @note The default is @p FALSE. |
306 | * @note The default is @p TRUE. |
| 322 | * @note Requires @p CH_USE_HEAP. |
- | |
| 323 | * @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the |
- | |
| 324 | * appropriate documentation. |
- | |
| 325 | */ |
307 | */ |
| 326 | #if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__) |
- | |
| 327 | #define CH_USE_MALLOC_HEAP FALSE |
308 | #define CH_CFG_USE_MEMPOOLS TRUE |
| 328 | #endif |
- | |
| 329 | 309 | ||
| 330 | /** |
310 | /** |
| 331 | * @brief Memory Pools Allocator APIs. |
311 | * @brief Objects FIFOs APIs. |
| 332 | * @details If enabled then the memory pools allocator APIs are included |
312 | * @details If enabled then the objects FIFOs APIs are included |
| 333 | * in the kernel. |
313 | * in the kernel. |
| 334 | * |
314 | * |
| 335 | * @note The default is @p TRUE. |
315 | * @note The default is @p TRUE. |
| 336 | */ |
316 | */ |
| 337 | #if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__) |
- | |
| 338 | #define CH_USE_MEMPOOLS TRUE |
317 | #define CH_CFG_USE_OBJ_FIFOS TRUE |
| 339 | #endif |
- | |
| 340 | 318 | ||
| 341 | /** |
319 | /** |
| 342 | * @brief Dynamic Threads APIs. |
320 | * @brief Dynamic Threads APIs. |
| 343 | * @details If enabled then the dynamic threads creation APIs are included |
321 | * @details If enabled then the dynamic threads creation APIs are included |
| 344 | * in the kernel. |
322 | * in the kernel. |
| 345 | * |
323 | * |
| 346 | * @note The default is @p TRUE. |
324 | * @note The default is @p TRUE. |
| 347 | * @note Requires @p CH_USE_WAITEXIT. |
325 | * @note Requires @p CH_CFG_USE_WAITEXIT. |
| 348 | * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS. |
326 | * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. |
| 349 | */ |
327 | */ |
| 350 | #if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__) |
328 | #define CH_CFG_USE_DYNAMIC TRUE |
| - | 329 | ||
| - | 330 | /** @} */ |
|
| - | 331 | ||
| - | 332 | /*===========================================================================*/ |
|
| - | 333 | /** |
|
| - | 334 | * @name Objects factory options |
|
| - | 335 | * @{ |
|
| - | 336 | */ |
|
| - | 337 | /*===========================================================================*/ |
|
| - | 338 | ||
| - | 339 | /** |
|
| - | 340 | * @brief Objects Factory APIs. |
|
| - | 341 | * @details If enabled then the objects factory APIs are included in the |
|
| - | 342 | * kernel. |
|
| - | 343 | * |
|
| - | 344 | * @note The default is @p FALSE. |
|
| - | 345 | */ |
|
| 351 | #define CH_USE_DYNAMIC TRUE |
346 | #define CH_CFG_USE_FACTORY TRUE |
| - | 347 | ||
| - | 348 | /** |
|
| - | 349 | * @brief Maximum length for object names. |
|
| - | 350 | * @details If the specified length is zero then the name is stored by |
|
| - | 351 | * pointer but this could have unintended side effects. |
|
| - | 352 | */ |
|
| - | 353 | #define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 |
|
| - | 354 | ||
| - | 355 | /** |
|
| - | 356 | * @brief Enables the registry of generic objects. |
|
| - | 357 | */ |
|
| - | 358 | #define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE |
|
| - | 359 | ||
| - | 360 | /** |
|
| - | 361 | * @brief Enables factory for generic buffers. |
|
| - | 362 | */ |
|
| - | 363 | #define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE |
|
| - | 364 | ||
| - | 365 | /** |
|
| - | 366 | * @brief Enables factory for semaphores. |
|
| - | 367 | */ |
|
| - | 368 | #define CH_CFG_FACTORY_SEMAPHORES TRUE |
|
| - | 369 | ||
| - | 370 | /** |
|
| - | 371 | * @brief Enables factory for mailboxes. |
|
| - | 372 | */ |
|
| - | 373 | #define CH_CFG_FACTORY_MAILBOXES TRUE |
|
| - | 374 | ||
| - | 375 | /** |
|
| - | 376 | * @brief Enables factory for objects FIFOs. |
|
| 352 | #endif |
377 | */ |
| - | 378 | #define CH_CFG_FACTORY_OBJ_FIFOS TRUE |
|
| 353 | 379 | ||
| 354 | /** @} */ |
380 | /** @} */ |
| 355 | 381 | ||
| 356 | /*===========================================================================*/ |
382 | /*===========================================================================*/ |
| 357 | /** |
383 | /** |
| Line 359... | Line 385... | ||
| 359 | * @{ |
385 | * @{ |
| 360 | */ |
386 | */ |
| 361 | /*===========================================================================*/ |
387 | /*===========================================================================*/ |
| 362 | 388 | ||
| 363 | /** |
389 | /** |
| - | 390 | * @brief Debug option, kernel statistics. |
|
| - | 391 | * |
|
| - | 392 | * @note The default is @p FALSE. |
|
| - | 393 | */ |
|
| - | 394 | #define CH_DBG_STATISTICS FALSE |
|
| - | 395 | ||
| - | 396 | /** |
|
| 364 | * @brief Debug option, system state check. |
397 | * @brief Debug option, system state check. |
| 365 | * @details If enabled the correct call protocol for system APIs is checked |
398 | * @details If enabled the correct call protocol for system APIs is checked |
| 366 | * at runtime. |
399 | * at runtime. |
| 367 | * |
400 | * |
| 368 | * @note The default is @p FALSE. |
401 | * @note The default is @p FALSE. |
| 369 | */ |
402 | */ |
| 370 | #if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__) |
- | |
| 371 | #define CH_DBG_SYSTEM_STATE_CHECK FALSE |
403 | #define CH_DBG_SYSTEM_STATE_CHECK FALSE |
| 372 | #endif |
- | |
| 373 | 404 | ||
| 374 | /** |
405 | /** |
| 375 | * @brief Debug option, parameters checks. |
406 | * @brief Debug option, parameters checks. |
| 376 | * @details If enabled then the checks on the API functions input |
407 | * @details If enabled then the checks on the API functions input |
| 377 | * parameters are activated. |
408 | * parameters are activated. |
| 378 | * |
409 | * |
| 379 | * @note The default is @p FALSE. |
410 | * @note The default is @p FALSE. |
| 380 | */ |
411 | */ |
| 381 | #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) |
- | |
| 382 | #define CH_DBG_ENABLE_CHECKS FALSE |
412 | #define CH_DBG_ENABLE_CHECKS FALSE |
| 383 | #endif |
- | |
| 384 | 413 | ||
| 385 | /** |
414 | /** |
| 386 | * @brief Debug option, consistency checks. |
415 | * @brief Debug option, consistency checks. |
| 387 | * @details If enabled then all the assertions in the kernel code are |
416 | * @details If enabled then all the assertions in the kernel code are |
| 388 | * activated. This includes consistency checks inside the kernel, |
417 | * activated. This includes consistency checks inside the kernel, |
| 389 | * runtime anomalies and port-defined checks. |
418 | * runtime anomalies and port-defined checks. |
| 390 | * |
419 | * |
| 391 | * @note The default is @p FALSE. |
420 | * @note The default is @p FALSE. |
| 392 | */ |
421 | */ |
| 393 | #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) |
- | |
| 394 | #define CH_DBG_ENABLE_ASSERTS FALSE |
422 | #define CH_DBG_ENABLE_ASSERTS FALSE |
| 395 | #endif |
- | |
| 396 | 423 | ||
| 397 | /** |
424 | /** |
| 398 | * @brief Debug option, trace buffer. |
425 | * @brief Debug option, trace buffer. |
| 399 | * @details If enabled then the context switch circular trace buffer is |
426 | * @details If enabled then the trace buffer is activated. |
| 400 | * activated. |
- | |
| 401 | * |
427 | * |
| 402 | * @note The default is @p FALSE. |
428 | * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. |
| - | 429 | */ |
|
| - | 430 | #define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED |
|
| - | 431 | ||
| - | 432 | /** |
|
| - | 433 | * @brief Trace buffer entries. |
|
| - | 434 | * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is |
|
| - | 435 | * different from @p CH_DBG_TRACE_MASK_DISABLED. |
|
| 403 | */ |
436 | */ |
| 404 | #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) |
- | |
| 405 | #define CH_DBG_ENABLE_TRACE FALSE |
437 | #define CH_DBG_TRACE_BUFFER_SIZE 128 |
| 406 | #endif |
- | |
| 407 | 438 | ||
| 408 | /** |
439 | /** |
| 409 | * @brief Debug option, stack checks. |
440 | * @brief Debug option, stack checks. |
| 410 | * @details If enabled then a runtime stack check is performed. |
441 | * @details If enabled then a runtime stack check is performed. |
| 411 | * |
442 | * |
| Line 413... | Line 444... | ||
| 413 | * @note The stack check is performed in a architecture/port dependent way. |
444 | * @note The stack check is performed in a architecture/port dependent way. |
| 414 | * It may not be implemented or some ports. |
445 | * It may not be implemented or some ports. |
| 415 | * @note The default failure mode is to halt the system with the global |
446 | * @note The default failure mode is to halt the system with the global |
| 416 | * @p panic_msg variable set to @p NULL. |
447 | * @p panic_msg variable set to @p NULL. |
| 417 | */ |
448 | */ |
| 418 | #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) |
- | |
| 419 | #define CH_DBG_ENABLE_STACK_CHECK FALSE |
449 | #define CH_DBG_ENABLE_STACK_CHECK FALSE |
| 420 | #endif |
- | |
| 421 | 450 | ||
| 422 | /** |
451 | /** |
| 423 | * @brief Debug option, stacks initialization. |
452 | * @brief Debug option, stacks initialization. |
| 424 | * @details If enabled then the threads working area is filled with a byte |
453 | * @details If enabled then the threads working area is filled with a byte |
| 425 | * value when a thread is created. This can be useful for the |
454 | * value when a thread is created. This can be useful for the |
| 426 | * runtime measurement of the used stack. |
455 | * runtime measurement of the used stack. |
| 427 | * |
456 | * |
| 428 | * @note The default is @p FALSE. |
457 | * @note The default is @p FALSE. |
| 429 | */ |
458 | */ |
| 430 | #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) |
- | |
| 431 | #define CH_DBG_FILL_THREADS FALSE |
459 | #define CH_DBG_FILL_THREADS FALSE |
| 432 | #endif |
- | |
| 433 | 460 | ||
| 434 | /** |
461 | /** |
| 435 | * @brief Debug option, threads profiling. |
462 | * @brief Debug option, threads profiling. |
| 436 | * @details If enabled then a field is added to the @p Thread structure that |
463 | * @details If enabled then a field is added to the @p thread_t structure that |
| 437 | * counts the system ticks occurred while executing the thread. |
464 | * counts the system ticks occurred while executing the thread. |
| 438 | * |
465 | * |
| 439 | * @note The default is @p TRUE. |
466 | * @note The default is @p FALSE. |
| 440 | * @note This debug option is defaulted to TRUE because it is required by |
467 | * @note This debug option is not currently compatible with the |
| 441 | * some test cases into the test suite. |
468 | * tickless mode. |
| 442 | */ |
469 | */ |
| 443 | #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) |
- | |
| 444 | #define CH_DBG_THREADS_PROFILING TRUE |
470 | #define CH_DBG_THREADS_PROFILING FALSE |
| 445 | #endif |
- | |
| 446 | 471 | ||
| 447 | /** @} */ |
472 | /** @} */ |
| 448 | 473 | ||
| 449 | /*===========================================================================*/ |
474 | /*===========================================================================*/ |
| 450 | /** |
475 | /** |
| Line 452... | Line 477... | ||
| 452 | * @{ |
477 | * @{ |
| 453 | */ |
478 | */ |
| 454 | /*===========================================================================*/ |
479 | /*===========================================================================*/ |
| 455 | 480 | ||
| 456 | /** |
481 | /** |
| - | 482 | * @brief System structure extension. |
|
| - | 483 | * @details User fields added to the end of the @p ch_system_t structure. |
|
| - | 484 | */ |
|
| - | 485 | #define CH_CFG_SYSTEM_EXTRA_FIELDS \ |
|
| - | 486 | /* Add threads custom fields here.*/ |
|
| - | 487 | ||
| - | 488 | /** |
|
| - | 489 | * @brief System initialization hook. |
|
| - | 490 | * @details User initialization code added to the @p chSysInit() function |
|
| - | 491 | * just before interrupts are enabled globally. |
|
| - | 492 | */ |
|
| - | 493 | #define CH_CFG_SYSTEM_INIT_HOOK(tp) { \ |
|
| - | 494 | /* Add threads initialization code here.*/ \ |
|
| - | 495 | } |
|
| - | 496 | ||
| - | 497 | /** |
|
| 457 | * @brief Threads descriptor structure extension. |
498 | * @brief Threads descriptor structure extension. |
| 458 | * @details User fields added to the end of the @p Thread structure. |
499 | * @details User fields added to the end of the @p thread_t structure. |
| 459 | */ |
500 | */ |
| 460 | #if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__) |
- | |
| 461 | #define THREAD_EXT_FIELDS \ |
501 | #define CH_CFG_THREAD_EXTRA_FIELDS \ |
| 462 | /* Add threads custom fields here.*/ |
502 | /* Add threads custom fields here.*/ |
| 463 | #endif |
- | |
| 464 | 503 | ||
| 465 | /** |
504 | /** |
| 466 | * @brief Threads initialization hook. |
505 | * @brief Threads initialization hook. |
| 467 | * @details User initialization code added to the @p chThdInit() API. |
506 | * @details User initialization code added to the @p _thread_init() function. |
| 468 | * |
507 | * |
| 469 | * @note It is invoked from within @p chThdInit() and implicitly from all |
508 | * @note It is invoked from within @p _thread_init() and implicitly from all |
| 470 | * the threads creation APIs. |
509 | * the threads creation APIs. |
| 471 | */ |
510 | */ |
| 472 | #if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__) |
- | |
| 473 | #define THREAD_EXT_INIT_HOOK(tp) { \ |
511 | #define CH_CFG_THREAD_INIT_HOOK(tp) { \ |
| 474 | /* Add threads initialization code here.*/ \ |
512 | /* Add threads initialization code here.*/ \ |
| 475 | } |
513 | } |
| 476 | #endif |
- | |
| 477 | 514 | ||
| 478 | /** |
515 | /** |
| 479 | * @brief Threads finalization hook. |
516 | * @brief Threads finalization hook. |
| 480 | * @details User finalization code added to the @p chThdExit() API. |
517 | * @details User finalization code added to the @p chThdExit() API. |
| 481 | * |
- | |
| 482 | * @note It is inserted into lock zone. |
- | |
| 483 | * @note It is also invoked when the threads simply return in order to |
- | |
| 484 | * terminate. |
- | |
| 485 | */ |
518 | */ |
| 486 | #if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__) |
- | |
| 487 | #define THREAD_EXT_EXIT_HOOK(tp) { \ |
519 | #define CH_CFG_THREAD_EXIT_HOOK(tp) { \ |
| 488 | /* Add threads finalization code here.*/ \ |
520 | /* Add threads finalization code here.*/ \ |
| 489 | } |
521 | } |
| 490 | #endif |
- | |
| 491 | 522 | ||
| 492 | /** |
523 | /** |
| 493 | * @brief Context switch hook. |
524 | * @brief Context switch hook. |
| 494 | * @details This hook is invoked just before switching between threads. |
525 | * @details This hook is invoked just before switching between threads. |
| 495 | */ |
526 | */ |
| 496 | #if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__) |
527 | #define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ |
| - | 528 | /* Context switch code here.*/ \ |
|
| - | 529 | } |
|
| - | 530 | ||
| - | 531 | /** |
|
| - | 532 | * @brief ISR enter hook. |
|
| - | 533 | */ |
|
| - | 534 | #define CH_CFG_IRQ_PROLOGUE_HOOK() { \ |
|
| - | 535 | /* IRQ prologue code here.*/ \ |
|
| - | 536 | } |
|
| - | 537 | ||
| - | 538 | /** |
|
| - | 539 | * @brief ISR exit hook. |
|
| - | 540 | */ |
|
| - | 541 | #define CH_CFG_IRQ_EPILOGUE_HOOK() { \ |
|
| - | 542 | /* IRQ epilogue code here.*/ \ |
|
| - | 543 | } |
|
| - | 544 | ||
| - | 545 | /** |
|
| - | 546 | * @brief Idle thread enter hook. |
|
| - | 547 | * @note This hook is invoked within a critical zone, no OS functions |
|
| - | 548 | * should be invoked from here. |
|
| - | 549 | * @note This macro can be used to activate a power saving mode. |
|
| - | 550 | */ |
|
| 497 | #define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \ |
551 | #define CH_CFG_IDLE_ENTER_HOOK() { \ |
| - | 552 | /* Idle-enter code here.*/ \ |
|
| - | 553 | } |
|
| - | 554 | ||
| - | 555 | /** |
|
| - | 556 | * @brief Idle thread leave hook. |
|
| - | 557 | * @note This hook is invoked within a critical zone, no OS functions |
|
| - | 558 | * should be invoked from here. |
|
| - | 559 | * @note This macro can be used to deactivate a power saving mode. |
|
| - | 560 | */ |
|
| - | 561 | #define CH_CFG_IDLE_LEAVE_HOOK() { \ |
|
| 498 | /* System halt code here.*/ \ |
562 | /* Idle-leave code here.*/ \ |
| 499 | } |
563 | } |
| 500 | #endif |
- | |
| 501 | 564 | ||
| 502 | /** |
565 | /** |
| 503 | * @brief Idle Loop hook. |
566 | * @brief Idle Loop hook. |
| 504 | * @details This hook is continuously invoked by the idle thread loop. |
567 | * @details This hook is continuously invoked by the idle thread loop. |
| 505 | */ |
568 | */ |
| 506 | #if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__) |
- | |
| 507 | #define IDLE_LOOP_HOOK() { \ |
569 | #define CH_CFG_IDLE_LOOP_HOOK() { \ |
| 508 | /* Idle loop code here.*/ \ |
570 | /* Idle loop code here.*/ \ |
| 509 | } |
571 | } |
| 510 | #endif |
- | |
| 511 | 572 | ||
| 512 | /** |
573 | /** |
| 513 | * @brief System tick event hook. |
574 | * @brief System tick event hook. |
| 514 | * @details This hook is invoked in the system tick handler immediately |
575 | * @details This hook is invoked in the system tick handler immediately |
| 515 | * after processing the virtual timers queue. |
576 | * after processing the virtual timers queue. |
| 516 | */ |
577 | */ |
| 517 | #if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__) |
- | |
| 518 | #define SYSTEM_TICK_EVENT_HOOK() { \ |
578 | #define CH_CFG_SYSTEM_TICK_HOOK() { \ |
| 519 | /* System tick event code here.*/ \ |
579 | /* System tick event code here.*/ \ |
| 520 | } |
580 | } |
| 521 | #endif |
- | |
| 522 | 581 | ||
| 523 | /** |
582 | /** |
| 524 | * @brief System halt hook. |
583 | * @brief System halt hook. |
| 525 | * @details This hook is invoked in case to a system halting error before |
584 | * @details This hook is invoked in case to a system halting error before |
| 526 | * the system is halted. |
585 | * the system is halted. |
| 527 | */ |
586 | */ |
| 528 | #if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__) |
- | |
| 529 | #define SYSTEM_HALT_HOOK() { \ |
587 | #define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ |
| 530 | /* System halt code here.*/ \ |
588 | /* System halt code here.*/ \ |
| 531 | } |
589 | } |
| - | 590 | ||
| - | 591 | /** |
|
| - | 592 | * @brief Trace hook. |
|
| - | 593 | * @details This hook is invoked each time a new record is written in the |
|
| - | 594 | * trace buffer. |
|
| 532 | #endif |
595 | */ |
| - | 596 | #define CH_CFG_TRACE_HOOK(tep) { \ |
|
| - | 597 | /* Trace code here.*/ \ |
|
| - | 598 | } |
|
| 533 | 599 | ||
| 534 | /** @} */ |
600 | /** @} */ |
| 535 | 601 | ||
| 536 | /*===========================================================================*/ |
602 | /*===========================================================================*/ |
| 537 | /* Port-specific settings (override port settings defaulted in chcore.h). */ |
603 | /* Port-specific settings (override port settings defaulted in chcore.h). */ |
| 538 | /*===========================================================================*/ |
604 | /*===========================================================================*/ |
| 539 | - | ||
| - | 605 | #define SHELL_CMD_TEST_ENABLED FALSE |
|
| 540 | #endif /* _CHCONF_H_ */ |
606 | #endif /* CHCONF_H */ |
| 541 | 607 | ||
| 542 | /** @} */ |
608 | /** @} */ |