RTX_Config.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. /*
  2. * Copyright (c) 2013-2021 Arm Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License); you may
  7. * not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  14. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. *
  18. * -----------------------------------------------------------------------------
  19. *
  20. * $Revision: V5.5.2
  21. *
  22. * Project: CMSIS-RTOS RTX
  23. * Title: RTX Configuration definitions
  24. *
  25. * -----------------------------------------------------------------------------
  26. */
  27. #ifndef RTX_CONFIG_H_
  28. #define RTX_CONFIG_H_
  29. #ifdef _RTE_
  30. #include "RTE_Components.h"
  31. #ifdef RTE_RTX_CONFIG_H
  32. #include RTE_RTX_CONFIG_H
  33. #endif
  34. #endif
  35. //-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
  36. // <h>System Configuration
  37. // =======================
  38. // <o>Global Dynamic Memory size [bytes] <0-1073741824:8>
  39. // <i> Defines the combined global dynamic memory size.
  40. // <i> Default: 32768
  41. #ifndef OS_DYNAMIC_MEM_SIZE
  42. #define OS_DYNAMIC_MEM_SIZE 32768
  43. #endif
  44. // <o>Kernel Tick Frequency [Hz] <1-1000000>
  45. // <i> Defines base time unit for delays and timeouts.
  46. // <i> Default: 1000 (1ms tick)
  47. #ifndef OS_TICK_FREQ
  48. #define OS_TICK_FREQ 1000
  49. #endif
  50. // <e>Round-Robin Thread switching
  51. // <i> Enables Round-Robin Thread switching.
  52. #ifndef OS_ROBIN_ENABLE
  53. #define OS_ROBIN_ENABLE 1
  54. #endif
  55. // <o>Round-Robin Timeout <1-1000>
  56. // <i> Defines how many ticks a thread will execute before a thread switch.
  57. // <i> Default: 5
  58. #ifndef OS_ROBIN_TIMEOUT
  59. #define OS_ROBIN_TIMEOUT 5
  60. #endif
  61. // </e>
  62. // <o>ISR FIFO Queue
  63. // <4=> 4 entries <8=> 8 entries <12=> 12 entries <16=> 16 entries
  64. // <24=> 24 entries <32=> 32 entries <48=> 48 entries <64=> 64 entries
  65. // <96=> 96 entries <128=> 128 entries <196=> 196 entries <256=> 256 entries
  66. // <i> RTOS Functions called from ISR store requests to this buffer.
  67. // <i> Default: 16 entries
  68. #ifndef OS_ISR_FIFO_QUEUE
  69. #define OS_ISR_FIFO_QUEUE 16
  70. #endif
  71. // <q>Object Memory usage counters
  72. // <i> Enables object memory usage counters (requires RTX source variant).
  73. #ifndef OS_OBJ_MEM_USAGE
  74. #define OS_OBJ_MEM_USAGE 0
  75. #endif
  76. // </h>
  77. // <h>Thread Configuration
  78. // =======================
  79. // <e>Object specific Memory allocation
  80. // <i> Enables object specific memory allocation.
  81. #ifndef OS_THREAD_OBJ_MEM
  82. #define OS_THREAD_OBJ_MEM 0
  83. #endif
  84. // <o>Number of user Threads <1-1000>
  85. // <i> Defines maximum number of user threads that can be active at the same time.
  86. // <i> Applies to user threads with system provided memory for control blocks.
  87. #ifndef OS_THREAD_NUM
  88. #define OS_THREAD_NUM 1
  89. #endif
  90. // <o>Number of user Threads with default Stack size <0-1000>
  91. // <i> Defines maximum number of user threads with default stack size.
  92. // <i> Applies to user threads with zero stack size specified.
  93. #ifndef OS_THREAD_DEF_STACK_NUM
  94. #define OS_THREAD_DEF_STACK_NUM 0
  95. #endif
  96. // <o>Total Stack size [bytes] for user Threads with user-provided Stack size <0-1073741824:8>
  97. // <i> Defines the combined stack size for user threads with user-provided stack size.
  98. // <i> Applies to user threads with user-provided stack size and system provided memory for stack.
  99. // <i> Default: 0
  100. #ifndef OS_THREAD_USER_STACK_SIZE
  101. #define OS_THREAD_USER_STACK_SIZE 0
  102. #endif
  103. // </e>
  104. // <o>Default Thread Stack size [bytes] <96-1073741824:8>
  105. // <i> Defines stack size for threads with zero stack size specified.
  106. // <i> Default: 3072
  107. #ifndef OS_STACK_SIZE
  108. #define OS_STACK_SIZE 3072
  109. #endif
  110. // <o>Idle Thread Stack size [bytes] <72-1073741824:8>
  111. // <i> Defines stack size for Idle thread.
  112. // <i> Default: 512
  113. #ifndef OS_IDLE_THREAD_STACK_SIZE
  114. #define OS_IDLE_THREAD_STACK_SIZE 512
  115. #endif
  116. // <o>Idle Thread TrustZone Module Identifier
  117. // <i> Defines TrustZone Thread Context Management Identifier.
  118. // <i> Applies only to cores with TrustZone technology.
  119. // <i> Default: 0 (not used)
  120. #ifndef OS_IDLE_THREAD_TZ_MOD_ID
  121. #define OS_IDLE_THREAD_TZ_MOD_ID 0
  122. #endif
  123. // <q>Stack overrun checking
  124. // <i> Enables stack overrun check at thread switch (requires RTX source variant).
  125. // <i> Enabling this option increases slightly the execution time of a thread switch.
  126. #ifndef OS_STACK_CHECK
  127. #define OS_STACK_CHECK 0
  128. #endif
  129. // <q>Stack usage watermark
  130. // <i> Initializes thread stack with watermark pattern for analyzing stack usage.
  131. // <i> Enabling this option increases significantly the execution time of thread creation.
  132. #ifndef OS_STACK_WATERMARK
  133. #define OS_STACK_WATERMARK 0
  134. #endif
  135. // <o>Processor mode for Thread execution
  136. // <0=> Unprivileged mode
  137. // <1=> Privileged mode
  138. // <i> Default: Privileged mode
  139. #ifndef OS_PRIVILEGE_MODE
  140. #define OS_PRIVILEGE_MODE 1
  141. #endif
  142. // </h>
  143. // <h>Timer Configuration
  144. // ======================
  145. // <e>Object specific Memory allocation
  146. // <i> Enables object specific memory allocation.
  147. #ifndef OS_TIMER_OBJ_MEM
  148. #define OS_TIMER_OBJ_MEM 0
  149. #endif
  150. // <o>Number of Timer objects <1-1000>
  151. // <i> Defines maximum number of objects that can be active at the same time.
  152. // <i> Applies to objects with system provided memory for control blocks.
  153. #ifndef OS_TIMER_NUM
  154. #define OS_TIMER_NUM 1
  155. #endif
  156. // </e>
  157. // <o>Timer Thread Priority
  158. // <8=> Low
  159. // <16=> Below Normal <24=> Normal <32=> Above Normal
  160. // <40=> High
  161. // <48=> Realtime
  162. // <i> Defines priority for timer thread
  163. // <i> Default: High
  164. #ifndef OS_TIMER_THREAD_PRIO
  165. #define OS_TIMER_THREAD_PRIO 40
  166. #endif
  167. // <o>Timer Thread Stack size [bytes] <0-1073741824:8>
  168. // <i> Defines stack size for Timer thread.
  169. // <i> May be set to 0 when timers are not used.
  170. // <i> Default: 512
  171. #ifndef OS_TIMER_THREAD_STACK_SIZE
  172. #define OS_TIMER_THREAD_STACK_SIZE 512
  173. #endif
  174. // <o>Timer Thread TrustZone Module Identifier
  175. // <i> Defines TrustZone Thread Context Management Identifier.
  176. // <i> Applies only to cores with TrustZone technology.
  177. // <i> Default: 0 (not used)
  178. #ifndef OS_TIMER_THREAD_TZ_MOD_ID
  179. #define OS_TIMER_THREAD_TZ_MOD_ID 0
  180. #endif
  181. // <o>Timer Callback Queue entries <0-256>
  182. // <i> Number of concurrent active timer callback functions.
  183. // <i> May be set to 0 when timers are not used.
  184. // <i> Default: 4
  185. #ifndef OS_TIMER_CB_QUEUE
  186. #define OS_TIMER_CB_QUEUE 4
  187. #endif
  188. // </h>
  189. // <h>Event Flags Configuration
  190. // ============================
  191. // <e>Object specific Memory allocation
  192. // <i> Enables object specific memory allocation.
  193. #ifndef OS_EVFLAGS_OBJ_MEM
  194. #define OS_EVFLAGS_OBJ_MEM 0
  195. #endif
  196. // <o>Number of Event Flags objects <1-1000>
  197. // <i> Defines maximum number of objects that can be active at the same time.
  198. // <i> Applies to objects with system provided memory for control blocks.
  199. #ifndef OS_EVFLAGS_NUM
  200. #define OS_EVFLAGS_NUM 1
  201. #endif
  202. // </e>
  203. // </h>
  204. // <h>Mutex Configuration
  205. // ======================
  206. // <e>Object specific Memory allocation
  207. // <i> Enables object specific memory allocation.
  208. #ifndef OS_MUTEX_OBJ_MEM
  209. #define OS_MUTEX_OBJ_MEM 0
  210. #endif
  211. // <o>Number of Mutex objects <1-1000>
  212. // <i> Defines maximum number of objects that can be active at the same time.
  213. // <i> Applies to objects with system provided memory for control blocks.
  214. #ifndef OS_MUTEX_NUM
  215. #define OS_MUTEX_NUM 1
  216. #endif
  217. // </e>
  218. // </h>
  219. // <h>Semaphore Configuration
  220. // ==========================
  221. // <e>Object specific Memory allocation
  222. // <i> Enables object specific memory allocation.
  223. #ifndef OS_SEMAPHORE_OBJ_MEM
  224. #define OS_SEMAPHORE_OBJ_MEM 0
  225. #endif
  226. // <o>Number of Semaphore objects <1-1000>
  227. // <i> Defines maximum number of objects that can be active at the same time.
  228. // <i> Applies to objects with system provided memory for control blocks.
  229. #ifndef OS_SEMAPHORE_NUM
  230. #define OS_SEMAPHORE_NUM 1
  231. #endif
  232. // </e>
  233. // </h>
  234. // <h>Memory Pool Configuration
  235. // ============================
  236. // <e>Object specific Memory allocation
  237. // <i> Enables object specific memory allocation.
  238. #ifndef OS_MEMPOOL_OBJ_MEM
  239. #define OS_MEMPOOL_OBJ_MEM 0
  240. #endif
  241. // <o>Number of Memory Pool objects <1-1000>
  242. // <i> Defines maximum number of objects that can be active at the same time.
  243. // <i> Applies to objects with system provided memory for control blocks.
  244. #ifndef OS_MEMPOOL_NUM
  245. #define OS_MEMPOOL_NUM 1
  246. #endif
  247. // <o>Data Storage Memory size [bytes] <0-1073741824:8>
  248. // <i> Defines the combined data storage memory size.
  249. // <i> Applies to objects with system provided memory for data storage.
  250. // <i> Default: 0
  251. #ifndef OS_MEMPOOL_DATA_SIZE
  252. #define OS_MEMPOOL_DATA_SIZE 0
  253. #endif
  254. // </e>
  255. // </h>
  256. // <h>Message Queue Configuration
  257. // ==============================
  258. // <e>Object specific Memory allocation
  259. // <i> Enables object specific memory allocation.
  260. #ifndef OS_MSGQUEUE_OBJ_MEM
  261. #define OS_MSGQUEUE_OBJ_MEM 0
  262. #endif
  263. // <o>Number of Message Queue objects <1-1000>
  264. // <i> Defines maximum number of objects that can be active at the same time.
  265. // <i> Applies to objects with system provided memory for control blocks.
  266. #ifndef OS_MSGQUEUE_NUM
  267. #define OS_MSGQUEUE_NUM 1
  268. #endif
  269. // <o>Data Storage Memory size [bytes] <0-1073741824:8>
  270. // <i> Defines the combined data storage memory size.
  271. // <i> Applies to objects with system provided memory for data storage.
  272. // <i> Default: 0
  273. #ifndef OS_MSGQUEUE_DATA_SIZE
  274. #define OS_MSGQUEUE_DATA_SIZE 0
  275. #endif
  276. // </e>
  277. // </h>
  278. // <h>Event Recorder Configuration
  279. // ===============================
  280. // <e>Global Initialization
  281. // <i> Initialize Event Recorder during 'osKernelInitialize'.
  282. #ifndef OS_EVR_INIT
  283. #define OS_EVR_INIT 0
  284. #endif
  285. // <q>Start recording
  286. // <i> Start event recording after initialization.
  287. #ifndef OS_EVR_START
  288. #define OS_EVR_START 1
  289. #endif
  290. // <h>Global Event Filter Setup
  291. // <i> Initial recording level applied to all components.
  292. // <o.0>Error events
  293. // <o.1>API function call events
  294. // <o.2>Operation events
  295. // <o.3>Detailed operation events
  296. // </h>
  297. #ifndef OS_EVR_LEVEL
  298. #define OS_EVR_LEVEL 0x00U
  299. #endif
  300. // <h>RTOS Event Filter Setup
  301. // <i> Recording levels for RTX components.
  302. // <i> Only applicable if events for the respective component are generated.
  303. // <e.7>Memory Management
  304. // <i> Recording level for Memory Management events.
  305. // <o.0>Error events
  306. // <o.1>API function call events
  307. // <o.2>Operation events
  308. // <o.3>Detailed operation events
  309. // </e>
  310. #ifndef OS_EVR_MEMORY_LEVEL
  311. #define OS_EVR_MEMORY_LEVEL 0x81U
  312. #endif
  313. // <e.7>Kernel
  314. // <i> Recording level for Kernel events.
  315. // <o.0>Error events
  316. // <o.1>API function call events
  317. // <o.2>Operation events
  318. // <o.3>Detailed operation events
  319. // </e>
  320. #ifndef OS_EVR_KERNEL_LEVEL
  321. #define OS_EVR_KERNEL_LEVEL 0x81U
  322. #endif
  323. // <e.7>Thread
  324. // <i> Recording level for Thread events.
  325. // <o.0>Error events
  326. // <o.1>API function call events
  327. // <o.2>Operation events
  328. // <o.3>Detailed operation events
  329. // </e>
  330. #ifndef OS_EVR_THREAD_LEVEL
  331. #define OS_EVR_THREAD_LEVEL 0x85U
  332. #endif
  333. // <e.7>Generic Wait
  334. // <i> Recording level for Generic Wait events.
  335. // <o.0>Error events
  336. // <o.1>API function call events
  337. // <o.2>Operation events
  338. // <o.3>Detailed operation events
  339. // </e>
  340. #ifndef OS_EVR_WAIT_LEVEL
  341. #define OS_EVR_WAIT_LEVEL 0x81U
  342. #endif
  343. // <e.7>Thread Flags
  344. // <i> Recording level for Thread Flags events.
  345. // <o.0>Error events
  346. // <o.1>API function call events
  347. // <o.2>Operation events
  348. // <o.3>Detailed operation events
  349. // </e>
  350. #ifndef OS_EVR_THFLAGS_LEVEL
  351. #define OS_EVR_THFLAGS_LEVEL 0x81U
  352. #endif
  353. // <e.7>Event Flags
  354. // <i> Recording level for Event Flags events.
  355. // <o.0>Error events
  356. // <o.1>API function call events
  357. // <o.2>Operation events
  358. // <o.3>Detailed operation events
  359. // </e>
  360. #ifndef OS_EVR_EVFLAGS_LEVEL
  361. #define OS_EVR_EVFLAGS_LEVEL 0x81U
  362. #endif
  363. // <e.7>Timer
  364. // <i> Recording level for Timer events.
  365. // <o.0>Error events
  366. // <o.1>API function call events
  367. // <o.2>Operation events
  368. // <o.3>Detailed operation events
  369. // </e>
  370. #ifndef OS_EVR_TIMER_LEVEL
  371. #define OS_EVR_TIMER_LEVEL 0x81U
  372. #endif
  373. // <e.7>Mutex
  374. // <i> Recording level for Mutex events.
  375. // <o.0>Error events
  376. // <o.1>API function call events
  377. // <o.2>Operation events
  378. // <o.3>Detailed operation events
  379. // </e>
  380. #ifndef OS_EVR_MUTEX_LEVEL
  381. #define OS_EVR_MUTEX_LEVEL 0x81U
  382. #endif
  383. // <e.7>Semaphore
  384. // <i> Recording level for Semaphore events.
  385. // <o.0>Error events
  386. // <o.1>API function call events
  387. // <o.2>Operation events
  388. // <o.3>Detailed operation events
  389. // </e>
  390. #ifndef OS_EVR_SEMAPHORE_LEVEL
  391. #define OS_EVR_SEMAPHORE_LEVEL 0x81U
  392. #endif
  393. // <e.7>Memory Pool
  394. // <i> Recording level for Memory Pool events.
  395. // <o.0>Error events
  396. // <o.1>API function call events
  397. // <o.2>Operation events
  398. // <o.3>Detailed operation events
  399. // </e>
  400. #ifndef OS_EVR_MEMPOOL_LEVEL
  401. #define OS_EVR_MEMPOOL_LEVEL 0x81U
  402. #endif
  403. // <e.7>Message Queue
  404. // <i> Recording level for Message Queue events.
  405. // <o.0>Error events
  406. // <o.1>API function call events
  407. // <o.2>Operation events
  408. // <o.3>Detailed operation events
  409. // </e>
  410. #ifndef OS_EVR_MSGQUEUE_LEVEL
  411. #define OS_EVR_MSGQUEUE_LEVEL 0x81U
  412. #endif
  413. // </h>
  414. // </e>
  415. // <h>RTOS Event Generation
  416. // <i> Enables event generation for RTX components (requires RTX source variant).
  417. // <q>Memory Management
  418. // <i> Enables Memory Management event generation.
  419. #ifndef OS_EVR_MEMORY
  420. #define OS_EVR_MEMORY 1
  421. #endif
  422. // <q>Kernel
  423. // <i> Enables Kernel event generation.
  424. #ifndef OS_EVR_KERNEL
  425. #define OS_EVR_KERNEL 1
  426. #endif
  427. // <q>Thread
  428. // <i> Enables Thread event generation.
  429. #ifndef OS_EVR_THREAD
  430. #define OS_EVR_THREAD 1
  431. #endif
  432. // <q>Generic Wait
  433. // <i> Enables Generic Wait event generation.
  434. #ifndef OS_EVR_WAIT
  435. #define OS_EVR_WAIT 1
  436. #endif
  437. // <q>Thread Flags
  438. // <i> Enables Thread Flags event generation.
  439. #ifndef OS_EVR_THFLAGS
  440. #define OS_EVR_THFLAGS 1
  441. #endif
  442. // <q>Event Flags
  443. // <i> Enables Event Flags event generation.
  444. #ifndef OS_EVR_EVFLAGS
  445. #define OS_EVR_EVFLAGS 1
  446. #endif
  447. // <q>Timer
  448. // <i> Enables Timer event generation.
  449. #ifndef OS_EVR_TIMER
  450. #define OS_EVR_TIMER 1
  451. #endif
  452. // <q>Mutex
  453. // <i> Enables Mutex event generation.
  454. #ifndef OS_EVR_MUTEX
  455. #define OS_EVR_MUTEX 1
  456. #endif
  457. // <q>Semaphore
  458. // <i> Enables Semaphore event generation.
  459. #ifndef OS_EVR_SEMAPHORE
  460. #define OS_EVR_SEMAPHORE 1
  461. #endif
  462. // <q>Memory Pool
  463. // <i> Enables Memory Pool event generation.
  464. #ifndef OS_EVR_MEMPOOL
  465. #define OS_EVR_MEMPOOL 1
  466. #endif
  467. // <q>Message Queue
  468. // <i> Enables Message Queue event generation.
  469. #ifndef OS_EVR_MSGQUEUE
  470. #define OS_EVR_MSGQUEUE 1
  471. #endif
  472. // </h>
  473. // </h>
  474. // Number of Threads which use standard C/C++ library libspace
  475. // (when thread specific memory allocation is not used).
  476. #if (OS_THREAD_OBJ_MEM == 0)
  477. #ifndef OS_THREAD_LIBSPACE_NUM
  478. #define OS_THREAD_LIBSPACE_NUM 4
  479. #endif
  480. #else
  481. #define OS_THREAD_LIBSPACE_NUM OS_THREAD_NUM
  482. #endif
  483. //------------- <<< end of configuration section >>> ---------------------------
  484. #endif // RTX_CONFIG_H_