FreeRTOS.h 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061
  1. /*
  2. FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
  3. All rights reserved
  4. VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
  5. This file is part of the FreeRTOS distribution.
  6. FreeRTOS is free software; you can redistribute it and/or modify it under
  7. the terms of the GNU General Public License (version 2) as published by the
  8. Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
  9. ***************************************************************************
  10. >>! NOTE: The modification to the GPL is included to allow you to !<<
  11. >>! distribute a combined work that includes FreeRTOS without being !<<
  12. >>! obliged to provide the source code for proprietary components !<<
  13. >>! outside of the FreeRTOS kernel. !<<
  14. ***************************************************************************
  15. FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
  16. WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  17. FOR A PARTICULAR PURPOSE. Full license text is available on the following
  18. link: http://www.freertos.org/a00114.html
  19. ***************************************************************************
  20. * *
  21. * FreeRTOS provides completely free yet professionally developed, *
  22. * robust, strictly quality controlled, supported, and cross *
  23. * platform software that is more than just the market leader, it *
  24. * is the industry's de facto standard. *
  25. * *
  26. * Help yourself get started quickly while simultaneously helping *
  27. * to support the FreeRTOS project by purchasing a FreeRTOS *
  28. * tutorial book, reference manual, or both: *
  29. * http://www.FreeRTOS.org/Documentation *
  30. * *
  31. ***************************************************************************
  32. http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
  33. the FAQ page "My application does not run, what could be wrong?". Have you
  34. defined configASSERT()?
  35. http://www.FreeRTOS.org/support - In return for receiving this top quality
  36. embedded software for free we request you assist our global community by
  37. participating in the support forum.
  38. http://www.FreeRTOS.org/training - Investing in training allows your team to
  39. be as productive as possible as early as possible. Now you can receive
  40. FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
  41. Ltd, and the world's leading authority on the world's leading RTOS.
  42. http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
  43. including FreeRTOS+Trace - an indispensable productivity tool, a DOS
  44. compatible FAT file system, and our tiny thread aware UDP/IP stack.
  45. http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
  46. Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
  47. http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
  48. Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
  49. licenses offer ticketed support, indemnification and commercial middleware.
  50. http://www.SafeRTOS.com - High Integrity Systems also provide a safety
  51. engineered and independently SIL3 certified version for use in safety and
  52. mission critical applications that require provable dependability.
  53. 1 tab == 4 spaces!
  54. */
  55. #ifndef INC_FREERTOS_H
  56. #define INC_FREERTOS_H
  57. /*
  58. * Include the generic headers required for the FreeRTOS port being used.
  59. */
  60. #include <stddef.h>
  61. #include "sys/reent.h"
  62. /*
  63. * If stdint.h cannot be located then:
  64. * + If using GCC ensure the -nostdint options is *not* being used.
  65. * + Ensure the project's include path includes the directory in which your
  66. * compiler stores stdint.h.
  67. * + Set any compiler options necessary for it to support C99, as technically
  68. * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any
  69. * other way).
  70. * + The FreeRTOS download includes a simple stdint.h definition that can be
  71. * used in cases where none is provided by the compiler. The files only
  72. * contains the typedefs required to build FreeRTOS. Read the instructions
  73. * in FreeRTOS/source/stdint.readme for more information.
  74. */
  75. #include <stdint.h> /* READ COMMENT ABOVE. */
  76. #ifdef __cplusplus
  77. extern "C" {
  78. #endif
  79. /* Application specific configuration options. */
  80. #include "FreeRTOSConfig.h"
  81. /* Basic FreeRTOS definitions. */
  82. #include "projdefs.h"
  83. /* Definitions specific to the port being used. */
  84. #include "portable.h"
  85. /*
  86. * Check all the required application specific macros have been defined.
  87. * These macros are application specific and (as downloaded) are defined
  88. * within FreeRTOSConfig.h.
  89. */
  90. #ifndef configMINIMAL_STACK_SIZE
  91. #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value.
  92. #endif
  93. #ifndef configMAX_PRIORITIES
  94. #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details.
  95. #endif
  96. #ifndef configUSE_PREEMPTION
  97. #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  98. #endif
  99. #ifndef configUSE_IDLE_HOOK
  100. #error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  101. #endif
  102. #ifndef configUSE_TICK_HOOK
  103. #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  104. #endif
  105. #ifndef configUSE_CO_ROUTINES
  106. #error Missing definition: configUSE_CO_ROUTINES must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  107. #endif
  108. #ifndef INCLUDE_vTaskPrioritySet
  109. #error Missing definition: INCLUDE_vTaskPrioritySet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  110. #endif
  111. #ifndef INCLUDE_uxTaskPriorityGet
  112. #error Missing definition: INCLUDE_uxTaskPriorityGet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  113. #endif
  114. #ifndef INCLUDE_vTaskDelete
  115. #error Missing definition: INCLUDE_vTaskDelete must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  116. #endif
  117. #ifndef INCLUDE_vTaskSuspend
  118. #error Missing definition: INCLUDE_vTaskSuspend must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  119. #endif
  120. #ifndef INCLUDE_vTaskDelayUntil
  121. #error Missing definition: INCLUDE_vTaskDelayUntil must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  122. #endif
  123. #ifndef INCLUDE_vTaskDelay
  124. #error Missing definition: INCLUDE_vTaskDelay must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  125. #endif
  126. #ifndef configUSE_16_BIT_TICKS
  127. #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
  128. #endif
  129. #if configUSE_CO_ROUTINES != 0
  130. #ifndef configMAX_CO_ROUTINE_PRIORITIES
  131. #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1.
  132. #endif
  133. #endif
  134. #ifndef configMAX_PRIORITIES
  135. #error configMAX_PRIORITIES must be defined to be greater than or equal to 1.
  136. #endif
  137. #ifndef INCLUDE_xTaskGetIdleTaskHandle
  138. #define INCLUDE_xTaskGetIdleTaskHandle 0
  139. #endif
  140. #ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle
  141. #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
  142. #endif
  143. #ifndef INCLUDE_xQueueGetMutexHolder
  144. #define INCLUDE_xQueueGetMutexHolder 0
  145. #endif
  146. #ifndef INCLUDE_xSemaphoreGetMutexHolder
  147. #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder
  148. #endif
  149. #ifndef INCLUDE_pcTaskGetTaskName
  150. #define INCLUDE_pcTaskGetTaskName 1
  151. #endif
  152. #ifndef configUSE_APPLICATION_TASK_TAG
  153. #define configUSE_APPLICATION_TASK_TAG 0
  154. #endif
  155. #ifndef INCLUDE_uxTaskGetStackHighWaterMark
  156. #define INCLUDE_uxTaskGetStackHighWaterMark 0
  157. #endif
  158. #ifndef INCLUDE_pxTaskGetStackStart
  159. #define INCLUDE_pxTaskGetStackStart 0
  160. #endif
  161. #ifndef INCLUDE_eTaskGetState
  162. #define INCLUDE_eTaskGetState 0
  163. #endif
  164. #ifndef configUSE_RECURSIVE_MUTEXES
  165. #define configUSE_RECURSIVE_MUTEXES 0
  166. #endif
  167. #ifndef configUSE_MUTEXES
  168. #define configUSE_MUTEXES 0
  169. #endif
  170. #ifndef configUSE_TIMERS
  171. #define configUSE_TIMERS 0
  172. #endif
  173. #ifndef configUSE_COUNTING_SEMAPHORES
  174. #define configUSE_COUNTING_SEMAPHORES 0
  175. #endif
  176. #ifndef configUSE_ALTERNATIVE_API
  177. #define configUSE_ALTERNATIVE_API 0
  178. #endif
  179. #ifndef portCRITICAL_NESTING_IN_TCB
  180. #define portCRITICAL_NESTING_IN_TCB 0
  181. #endif
  182. #ifndef configMAX_TASK_NAME_LEN
  183. #define configMAX_TASK_NAME_LEN 16
  184. #endif
  185. #ifndef configIDLE_SHOULD_YIELD
  186. #define configIDLE_SHOULD_YIELD 1
  187. #endif
  188. #if configMAX_TASK_NAME_LEN < 1
  189. #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h
  190. #endif
  191. #ifndef INCLUDE_xTaskResumeFromISR
  192. #define INCLUDE_xTaskResumeFromISR 1
  193. #endif
  194. #ifndef INCLUDE_xEventGroupSetBitFromISR
  195. #define INCLUDE_xEventGroupSetBitFromISR 0
  196. #endif
  197. #ifndef INCLUDE_xTimerPendFunctionCall
  198. #define INCLUDE_xTimerPendFunctionCall 0
  199. #endif
  200. #ifndef configASSERT
  201. #define configASSERT( x )
  202. #define configASSERT_DEFINED 0
  203. #else
  204. #define configASSERT_DEFINED 1
  205. #endif
  206. /* The timers module relies on xTaskGetSchedulerState(). */
  207. #if configUSE_TIMERS == 1
  208. #ifndef configTIMER_TASK_PRIORITY
  209. #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined.
  210. #endif /* configTIMER_TASK_PRIORITY */
  211. #ifndef configTIMER_QUEUE_LENGTH
  212. #error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined.
  213. #endif /* configTIMER_QUEUE_LENGTH */
  214. #ifndef configTIMER_TASK_STACK_DEPTH
  215. #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined.
  216. #endif /* configTIMER_TASK_STACK_DEPTH */
  217. #endif /* configUSE_TIMERS */
  218. #ifndef INCLUDE_xTaskGetSchedulerState
  219. #define INCLUDE_xTaskGetSchedulerState 0
  220. #endif
  221. #ifndef INCLUDE_xTaskGetCurrentTaskHandle
  222. #define INCLUDE_xTaskGetCurrentTaskHandle 0
  223. #endif
  224. #ifndef portSET_INTERRUPT_MASK_FROM_ISR
  225. #define portSET_INTERRUPT_MASK_FROM_ISR() 0
  226. #endif
  227. #ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR
  228. #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue
  229. #endif
  230. #ifndef portCLEAN_UP_TCB
  231. #define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB
  232. #endif
  233. #ifndef portPRE_TASK_DELETE_HOOK
  234. #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending )
  235. #endif
  236. #ifndef portSETUP_TCB
  237. #define portSETUP_TCB( pxTCB ) ( void ) pxTCB
  238. #endif
  239. #ifndef configQUEUE_REGISTRY_SIZE
  240. #define configQUEUE_REGISTRY_SIZE 0U
  241. #endif
  242. #if ( configQUEUE_REGISTRY_SIZE < 1 )
  243. #define vQueueAddToRegistry( xQueue, pcName )
  244. #define vQueueUnregisterQueue( xQueue )
  245. #endif
  246. #ifndef portPOINTER_SIZE_TYPE
  247. #define portPOINTER_SIZE_TYPE uint32_t
  248. #endif
  249. /* Remove any unused trace macros. */
  250. #ifndef traceSTART
  251. /* Used to perform any necessary initialisation - for example, open a file
  252. into which trace is to be written. */
  253. #define traceSTART()
  254. #endif
  255. #ifndef traceEND
  256. /* Use to close a trace, for example close a file into which trace has been
  257. written. */
  258. #define traceEND()
  259. #endif
  260. #ifndef traceTASK_SWITCHED_IN
  261. /* Called after a task has been selected to run. pxCurrentTCB holds a pointer
  262. to the task control block of the selected task. */
  263. #define traceTASK_SWITCHED_IN()
  264. #endif
  265. #ifndef traceINCREASE_TICK_COUNT
  266. /* Called before stepping the tick count after waking from tickless idle
  267. sleep. */
  268. #define traceINCREASE_TICK_COUNT( x )
  269. #endif
  270. #ifndef traceLOW_POWER_IDLE_BEGIN
  271. /* Called immediately before entering tickless idle. */
  272. #define traceLOW_POWER_IDLE_BEGIN()
  273. #endif
  274. #ifndef traceLOW_POWER_IDLE_END
  275. /* Called when returning to the Idle task after a tickless idle. */
  276. #define traceLOW_POWER_IDLE_END()
  277. #endif
  278. #ifndef traceTASK_SWITCHED_OUT
  279. /* Called before a task has been selected to run. pxCurrentTCB holds a pointer
  280. to the task control block of the task being switched out. */
  281. #define traceTASK_SWITCHED_OUT()
  282. #endif
  283. #ifndef traceTASK_PRIORITY_INHERIT
  284. /* Called when a task attempts to take a mutex that is already held by a
  285. lower priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task
  286. that holds the mutex. uxInheritedPriority is the priority the mutex holder
  287. will inherit (the priority of the task that is attempting to obtain the
  288. muted. */
  289. #define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority )
  290. #endif
  291. #ifndef traceTASK_PRIORITY_DISINHERIT
  292. /* Called when a task releases a mutex, the holding of which had resulted in
  293. the task inheriting the priority of a higher priority task.
  294. pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the
  295. mutex. uxOriginalPriority is the task's configured (base) priority. */
  296. #define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority )
  297. #endif
  298. #ifndef traceBLOCKING_ON_QUEUE_RECEIVE
  299. /* Task is about to block because it cannot read from a
  300. queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore
  301. upon which the read was attempted. pxCurrentTCB points to the TCB of the
  302. task that attempted the read. */
  303. #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )
  304. #endif
  305. #ifndef traceBLOCKING_ON_QUEUE_SEND
  306. /* Task is about to block because it cannot write to a
  307. queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore
  308. upon which the write was attempted. pxCurrentTCB points to the TCB of the
  309. task that attempted the write. */
  310. #define traceBLOCKING_ON_QUEUE_SEND( pxQueue )
  311. #endif
  312. #ifndef configCHECK_FOR_STACK_OVERFLOW
  313. #define configCHECK_FOR_STACK_OVERFLOW 0
  314. #endif
  315. /* The following event macros are embedded in the kernel API calls. */
  316. #ifndef traceMOVED_TASK_TO_READY_STATE
  317. #define traceMOVED_TASK_TO_READY_STATE( pxTCB )
  318. #endif
  319. #ifndef traceREADDED_TASK_TO_READY_STATE
  320. #define traceREADDED_TASK_TO_READY_STATE( pxTCB ) traceMOVED_TASK_TO_READY_STATE( pxTCB )
  321. #endif
  322. #ifndef traceMOVED_TASK_TO_DELAYED_LIST
  323. #define traceMOVED_TASK_TO_DELAYED_LIST()
  324. #endif
  325. #ifndef traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST
  326. #define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST()
  327. #endif
  328. #ifndef traceMOVED_TASK_TO_SUSPENDED_LIST
  329. #define traceMOVED_TASK_TO_SUSPENDED_LIST( pxTCB )
  330. #endif
  331. #ifndef traceQUEUE_CREATE
  332. #define traceQUEUE_CREATE( pxNewQueue )
  333. #endif
  334. #ifndef traceQUEUE_CREATE_FAILED
  335. #define traceQUEUE_CREATE_FAILED( ucQueueType )
  336. #endif
  337. #ifndef traceCREATE_MUTEX
  338. #define traceCREATE_MUTEX( pxNewQueue )
  339. #endif
  340. #ifndef traceCREATE_MUTEX_FAILED
  341. #define traceCREATE_MUTEX_FAILED()
  342. #endif
  343. #ifndef traceGIVE_MUTEX_RECURSIVE
  344. #define traceGIVE_MUTEX_RECURSIVE( pxMutex )
  345. #endif
  346. #ifndef traceGIVE_MUTEX_RECURSIVE_FAILED
  347. #define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex )
  348. #endif
  349. #ifndef traceTAKE_MUTEX_RECURSIVE
  350. #define traceTAKE_MUTEX_RECURSIVE( pxMutex )
  351. #endif
  352. #ifndef traceTAKE_MUTEX_RECURSIVE_FAILED
  353. #define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex )
  354. #endif
  355. #ifndef traceCREATE_COUNTING_SEMAPHORE
  356. #define traceCREATE_COUNTING_SEMAPHORE()
  357. #endif
  358. #ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED
  359. #define traceCREATE_COUNTING_SEMAPHORE_FAILED()
  360. #endif
  361. #ifndef traceQUEUE_SEND
  362. #define traceQUEUE_SEND( pxQueue )
  363. #endif
  364. #ifndef traceQUEUE_SEND_FAILED
  365. #define traceQUEUE_SEND_FAILED( pxQueue )
  366. #endif
  367. #ifndef traceQUEUE_RECEIVE
  368. #define traceQUEUE_RECEIVE( pxQueue )
  369. #endif
  370. #ifndef traceQUEUE_PEEK
  371. #define traceQUEUE_PEEK( pxQueue )
  372. #endif
  373. #ifndef traceQUEUE_PEEK_FROM_ISR
  374. #define traceQUEUE_PEEK_FROM_ISR( pxQueue )
  375. #endif
  376. #ifndef traceQUEUE_RECEIVE_FAILED
  377. #define traceQUEUE_RECEIVE_FAILED( pxQueue )
  378. #endif
  379. #ifndef traceQUEUE_SEND_FROM_ISR
  380. #define traceQUEUE_SEND_FROM_ISR( pxQueue )
  381. #endif
  382. #ifndef traceQUEUE_SEND_FROM_ISR_FAILED
  383. #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue )
  384. #endif
  385. #ifndef traceQUEUE_RECEIVE_FROM_ISR
  386. #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue )
  387. #endif
  388. #ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED
  389. #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue )
  390. #endif
  391. #ifndef traceQUEUE_PEEK_FROM_ISR_FAILED
  392. #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue )
  393. #endif
  394. #ifndef traceQUEUE_DELETE
  395. #define traceQUEUE_DELETE( pxQueue )
  396. #endif
  397. #ifndef traceTASK_CREATE
  398. #define traceTASK_CREATE( pxNewTCB )
  399. #endif
  400. #ifndef traceQUEUE_GIVE_FROM_ISR
  401. #define traceQUEUE_GIVE_FROM_ISR( pxQueue )
  402. #endif
  403. #ifndef traceQUEUE_GIVE_FROM_ISR_FAILED
  404. #define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue )
  405. #endif
  406. #ifndef traceTASK_CREATE_FAILED
  407. #define traceTASK_CREATE_FAILED()
  408. #endif
  409. #ifndef traceTASK_DELETE
  410. #define traceTASK_DELETE( pxTaskToDelete )
  411. #endif
  412. #ifndef traceTASK_DELAY_UNTIL
  413. #define traceTASK_DELAY_UNTIL()
  414. #endif
  415. #ifndef traceTASK_DELAY
  416. #define traceTASK_DELAY()
  417. #endif
  418. #ifndef traceTASK_PRIORITY_SET
  419. #define traceTASK_PRIORITY_SET( pxTask, uxNewPriority )
  420. #endif
  421. #ifndef traceTASK_SUSPEND
  422. #define traceTASK_SUSPEND( pxTaskToSuspend )
  423. #endif
  424. #ifndef traceTASK_RESUME
  425. #define traceTASK_RESUME( pxTaskToResume )
  426. #endif
  427. #ifndef traceTASK_RESUME_FROM_ISR
  428. #define traceTASK_RESUME_FROM_ISR( pxTaskToResume )
  429. #endif
  430. #ifndef traceTASK_INCREMENT_TICK
  431. #define traceTASK_INCREMENT_TICK( xTickCount )
  432. #endif
  433. #ifndef traceTIMER_CREATE
  434. #define traceTIMER_CREATE( pxNewTimer )
  435. #endif
  436. #ifndef traceTIMER_CREATE_FAILED
  437. #define traceTIMER_CREATE_FAILED()
  438. #endif
  439. #ifndef traceTIMER_COMMAND_SEND
  440. #define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn )
  441. #endif
  442. #ifndef traceTIMER_EXPIRED
  443. #define traceTIMER_EXPIRED( pxTimer )
  444. #endif
  445. #ifndef traceTIMER_COMMAND_RECEIVED
  446. #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue )
  447. #endif
  448. #ifndef traceMALLOC
  449. #define traceMALLOC( pvAddress, uiSize )
  450. #endif
  451. #ifndef traceFREE
  452. #define traceFREE( pvAddress, uiSize )
  453. #endif
  454. #ifndef traceEVENT_GROUP_CREATE
  455. #define traceEVENT_GROUP_CREATE( xEventGroup )
  456. #endif
  457. #ifndef traceEVENT_GROUP_CREATE_FAILED
  458. #define traceEVENT_GROUP_CREATE_FAILED()
  459. #endif
  460. #ifndef traceEVENT_GROUP_SYNC_BLOCK
  461. #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor )
  462. #endif
  463. #ifndef traceEVENT_GROUP_SYNC_END
  464. #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred
  465. #endif
  466. #ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK
  467. #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor )
  468. #endif
  469. #ifndef traceEVENT_GROUP_WAIT_BITS_END
  470. #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred
  471. #endif
  472. #ifndef traceEVENT_GROUP_CLEAR_BITS
  473. #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear )
  474. #endif
  475. #ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR
  476. #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear )
  477. #endif
  478. #ifndef traceEVENT_GROUP_SET_BITS
  479. #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet )
  480. #endif
  481. #ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR
  482. #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet )
  483. #endif
  484. #ifndef traceEVENT_GROUP_DELETE
  485. #define traceEVENT_GROUP_DELETE( xEventGroup )
  486. #endif
  487. #ifndef tracePEND_FUNC_CALL
  488. #define tracePEND_FUNC_CALL(xFunctionToPend, pvParameter1, ulParameter2, ret)
  489. #endif
  490. #ifndef tracePEND_FUNC_CALL_FROM_ISR
  491. #define tracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend, pvParameter1, ulParameter2, ret)
  492. #endif
  493. #ifndef traceQUEUE_REGISTRY_ADD
  494. #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName)
  495. #endif
  496. #ifndef traceTASK_NOTIFY_GIVE_FROM_ISR
  497. #define traceTASK_NOTIFY_GIVE_FROM_ISR()
  498. #endif
  499. #ifndef traceISR_EXIT_TO_SCHEDULER
  500. #define traceISR_EXIT_TO_SCHEDULER()
  501. #endif
  502. #ifndef traceISR_EXIT
  503. #define traceISR_EXIT()
  504. #endif
  505. #ifndef traceISR_ENTER
  506. #define traceISR_ENTER(_n_)
  507. #endif
  508. #ifndef configGENERATE_RUN_TIME_STATS
  509. #define configGENERATE_RUN_TIME_STATS 0
  510. #endif
  511. #if ( configGENERATE_RUN_TIME_STATS == 1 )
  512. #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
  513. #error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base.
  514. #endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */
  515. #ifndef portGET_RUN_TIME_COUNTER_VALUE
  516. #ifndef portALT_GET_RUN_TIME_COUNTER_VALUE
  517. #error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information.
  518. #endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */
  519. #endif /* portGET_RUN_TIME_COUNTER_VALUE */
  520. #endif /* configGENERATE_RUN_TIME_STATS */
  521. #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
  522. #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
  523. #endif
  524. #ifndef configUSE_MALLOC_FAILED_HOOK
  525. #define configUSE_MALLOC_FAILED_HOOK 0
  526. #endif
  527. #ifndef portPRIVILEGE_BIT
  528. #define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 )
  529. #endif
  530. #ifndef portYIELD_WITHIN_API
  531. #define portYIELD_WITHIN_API portYIELD
  532. #endif
  533. #ifndef pvPortMallocAligned
  534. #define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) )
  535. #endif
  536. #ifndef vPortFreeAligned
  537. #define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )
  538. #endif
  539. #ifndef portSUPPRESS_TICKS_AND_SLEEP
  540. #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )
  541. #endif
  542. #ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP
  543. #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2
  544. #endif
  545. #if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2
  546. #error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2
  547. #endif
  548. #ifndef configUSE_TICKLESS_IDLE
  549. #define configUSE_TICKLESS_IDLE 0
  550. #endif
  551. #ifndef configPRE_SLEEP_PROCESSING
  552. #define configPRE_SLEEP_PROCESSING( x )
  553. #endif
  554. #ifndef configPOST_SLEEP_PROCESSING
  555. #define configPOST_SLEEP_PROCESSING( x )
  556. #endif
  557. #ifndef configUSE_QUEUE_SETS
  558. #define configUSE_QUEUE_SETS 0
  559. #endif
  560. #ifndef portTASK_USES_FLOATING_POINT
  561. #define portTASK_USES_FLOATING_POINT()
  562. #endif
  563. #ifndef configUSE_TIME_SLICING
  564. #define configUSE_TIME_SLICING 1
  565. #endif
  566. #ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS
  567. #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0
  568. #endif
  569. #ifndef configUSE_NEWLIB_REENTRANT
  570. #define configUSE_NEWLIB_REENTRANT 0
  571. #endif
  572. #ifndef configUSE_STATS_FORMATTING_FUNCTIONS
  573. #define configUSE_STATS_FORMATTING_FUNCTIONS 0
  574. #endif
  575. #ifndef configTASKLIST_INCLUDE_COREID
  576. #define configTASKLIST_INCLUDE_COREID 0
  577. #endif
  578. #ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID
  579. #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()
  580. #endif
  581. #ifndef configUSE_TRACE_FACILITY
  582. #define configUSE_TRACE_FACILITY 0
  583. #endif
  584. #ifndef mtCOVERAGE_TEST_MARKER
  585. #define mtCOVERAGE_TEST_MARKER()
  586. #endif
  587. #ifndef portASSERT_IF_IN_ISR
  588. #define portASSERT_IF_IN_ISR()
  589. #endif
  590. #ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION
  591. #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
  592. #endif
  593. #ifndef configAPPLICATION_ALLOCATED_HEAP
  594. #define configAPPLICATION_ALLOCATED_HEAP 0
  595. #endif
  596. #ifndef configUSE_TASK_NOTIFICATIONS
  597. #define configUSE_TASK_NOTIFICATIONS 1
  598. #endif
  599. #ifndef portTICK_TYPE_IS_ATOMIC
  600. #define portTICK_TYPE_IS_ATOMIC 0
  601. #endif
  602. #ifndef configSUPPORT_STATIC_ALLOCATION
  603. /* Defaults to 0 for backward compatibility. */
  604. #define configSUPPORT_STATIC_ALLOCATION 0
  605. #endif
  606. #ifndef configSUPPORT_DYNAMIC_ALLOCATION
  607. /* Defaults to 1 for backward compatibility. */
  608. #define configSUPPORT_DYNAMIC_ALLOCATION 1
  609. #endif
  610. #if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) )
  611. #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1.
  612. #endif
  613. #if( portTICK_TYPE_IS_ATOMIC == 0 )
  614. /* Either variables of tick type cannot be read atomically, or
  615. portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when
  616. the tick count is returned to the standard critical section macros. */
  617. #define portTICK_TYPE_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
  618. #define portTICK_TYPE_EXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
  619. #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()
  620. #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) )
  621. #else
  622. /* The tick type can be read atomically, so critical sections used when the
  623. tick count is returned can be defined away. */
  624. #define portTICK_TYPE_ENTER_CRITICAL()
  625. #define portTICK_TYPE_EXIT_CRITICAL()
  626. #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0
  627. #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x
  628. #endif
  629. /* Definitions to allow backward compatibility with FreeRTOS versions prior to
  630. V8 if desired. */
  631. #ifndef configENABLE_BACKWARD_COMPATIBILITY
  632. #define configENABLE_BACKWARD_COMPATIBILITY 1
  633. #endif
  634. #if configENABLE_BACKWARD_COMPATIBILITY == 1
  635. #define eTaskStateGet eTaskGetState
  636. #define portTickType TickType_t
  637. #define xTaskHandle TaskHandle_t
  638. #define xQueueHandle QueueHandle_t
  639. #define xSemaphoreHandle SemaphoreHandle_t
  640. #define xQueueSetHandle QueueSetHandle_t
  641. #define xQueueSetMemberHandle QueueSetMemberHandle_t
  642. #define xTimeOutType TimeOut_t
  643. #define xMemoryRegion MemoryRegion_t
  644. #define xTaskParameters TaskParameters_t
  645. #define xTaskStatusType TaskStatus_t
  646. #define xTimerHandle TimerHandle_t
  647. #define xCoRoutineHandle CoRoutineHandle_t
  648. #define pdTASK_HOOK_CODE TaskHookFunction_t
  649. #define portTICK_RATE_MS portTICK_PERIOD_MS
  650. /* Backward compatibility within the scheduler code only - these definitions
  651. are not really required but are included for completeness. */
  652. #define tmrTIMER_CALLBACK TimerCallbackFunction_t
  653. #define pdTASK_CODE TaskFunction_t
  654. #define xListItem ListItem_t
  655. #define xList List_t
  656. #endif /* configENABLE_BACKWARD_COMPATIBILITY */
  657. #ifndef configESP32_PER_TASK_DATA
  658. #define configESP32_PER_TASK_DATA 1
  659. #endif
  660. /*
  661. * In line with software engineering best practice, FreeRTOS implements a strict
  662. * data hiding policy, so the real structures used by FreeRTOS to maintain the
  663. * state of tasks, queues, semaphores, etc. are not accessible to the application
  664. * code. However, if the application writer wants to statically allocate such
  665. * an object then the size of the object needs to be know. Dummy structures
  666. * that are guaranteed to have the same size and alignment requirements of the
  667. * real objects are used for this purpose. The dummy list and list item
  668. * structures below are used for inclusion in such a dummy structure.
  669. */
  670. struct xSTATIC_LIST_ITEM
  671. {
  672. TickType_t xDummy1;
  673. void *pvDummy2[ 4 ];
  674. };
  675. typedef struct xSTATIC_LIST_ITEM StaticListItem_t;
  676. /* See the comments above the struct xSTATIC_LIST_ITEM definition. */
  677. struct xSTATIC_MINI_LIST_ITEM
  678. {
  679. TickType_t xDummy1;
  680. void *pvDummy2[ 2 ];
  681. };
  682. typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t;
  683. /* See the comments above the struct xSTATIC_LIST_ITEM definition. */
  684. typedef struct xSTATIC_LIST
  685. {
  686. UBaseType_t uxDummy1;
  687. void *pvDummy2;
  688. StaticMiniListItem_t xDummy3;
  689. } StaticList_t;
  690. /*
  691. * In line with software engineering best practice, especially when supplying a
  692. * library that is likely to change in future versions, FreeRTOS implements a
  693. * strict data hiding policy. This means the Task structure used internally by
  694. * FreeRTOS is not accessible to application code. However, if the application
  695. * writer wants to statically allocate the memory required to create a task then
  696. * the size of the task object needs to be know. The StaticTask_t structure
  697. * below is provided for this purpose. Its sizes and alignment requirements are
  698. * guaranteed to match those of the genuine structure, no matter which
  699. * architecture is being used, and no matter how the values in FreeRTOSConfig.h
  700. * are set. Its contents are somewhat obfuscated in the hope users will
  701. * recognise that it would be unwise to make direct use of the structure members.
  702. */
  703. typedef struct xSTATIC_TCB
  704. {
  705. void *pxDummy1;
  706. #if ( portUSING_MPU_WRAPPERS == 1 )
  707. xMPU_SETTINGS xDummy2;
  708. #endif
  709. StaticListItem_t xDummy3[ 2 ];
  710. UBaseType_t uxDummy5;
  711. void *pxDummy6;
  712. uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ];
  713. UBaseType_t uxDummyCoreId;
  714. #if ( portSTACK_GROWTH > 0 || configENABLE_TASK_SNAPSHOT == 1 )
  715. void *pxDummy8;
  716. #endif
  717. #if ( portCRITICAL_NESTING_IN_TCB == 1 )
  718. UBaseType_t uxDummy9;
  719. uint32_t OldInterruptState;
  720. #endif
  721. #if ( configUSE_TRACE_FACILITY == 1 )
  722. UBaseType_t uxDummy10[ 2 ];
  723. #endif
  724. #if ( configUSE_MUTEXES == 1 )
  725. UBaseType_t uxDummy12[ 2 ];
  726. #endif
  727. #if ( configUSE_APPLICATION_TASK_TAG == 1 )
  728. void *pxDummy14;
  729. #endif
  730. #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )
  731. void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];
  732. #if ( configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS )
  733. void *pvDummyLocalStorageCallBack[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];
  734. #endif
  735. #endif
  736. #if ( configGENERATE_RUN_TIME_STATS == 1 )
  737. uint32_t ulDummy16;
  738. #endif
  739. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  740. struct _reent xDummy17;
  741. #endif
  742. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  743. uint32_t ulDummy18;
  744. uint32_t ucDummy19;
  745. #endif
  746. #if( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) \
  747. || ( portUSING_MPU_WRAPPERS == 1 ) )
  748. uint8_t uxDummy20;
  749. #endif
  750. } StaticTask_t;
  751. /*
  752. * In line with software engineering best practice, especially when supplying a
  753. * library that is likely to change in future versions, FreeRTOS implements a
  754. * strict data hiding policy. This means the Queue structure used internally by
  755. * FreeRTOS is not accessible to application code. However, if the application
  756. * writer wants to statically allocate the memory required to create a queue
  757. * then the size of the queue object needs to be know. The StaticQueue_t
  758. * structure below is provided for this purpose. Its sizes and alignment
  759. * requirements are guaranteed to match those of the genuine structure, no
  760. * matter which architecture is being used, and no matter how the values in
  761. * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope
  762. * users will recognise that it would be unwise to make direct use of the
  763. * structure members.
  764. */
  765. typedef struct xSTATIC_QUEUE
  766. {
  767. void *pvDummy1[ 3 ];
  768. union
  769. {
  770. void *pvDummy2;
  771. UBaseType_t uxDummy2;
  772. } u;
  773. StaticList_t xDummy3[ 2 ];
  774. UBaseType_t uxDummy4[ 3 ];
  775. #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  776. uint8_t ucDummy6;
  777. #endif
  778. #if ( configUSE_QUEUE_SETS == 1 )
  779. void *pvDummy7;
  780. #endif
  781. #if ( configUSE_TRACE_FACILITY == 1 )
  782. UBaseType_t uxDummy8;
  783. uint8_t ucDummy9;
  784. #endif
  785. portMUX_TYPE muxDummy; //Mutex required due to SMP
  786. } StaticQueue_t;
  787. typedef StaticQueue_t StaticSemaphore_t;
  788. /*
  789. * In line with software engineering best practice, especially when supplying a
  790. * library that is likely to change in future versions, FreeRTOS implements a
  791. * strict data hiding policy. This means the event group structure used
  792. * internally by FreeRTOS is not accessible to application code. However, if
  793. * the application writer wants to statically allocate the memory required to
  794. * create an event group then the size of the event group object needs to be
  795. * know. The StaticEventGroup_t structure below is provided for this purpose.
  796. * Its sizes and alignment requirements are guaranteed to match those of the
  797. * genuine structure, no matter which architecture is being used, and no matter
  798. * how the values in FreeRTOSConfig.h are set. Its contents are somewhat
  799. * obfuscated in the hope users will recognise that it would be unwise to make
  800. * direct use of the structure members.
  801. */
  802. typedef struct xSTATIC_EVENT_GROUP
  803. {
  804. TickType_t xDummy1;
  805. StaticList_t xDummy2;
  806. #if( configUSE_TRACE_FACILITY == 1 )
  807. UBaseType_t uxDummy3;
  808. #endif
  809. #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  810. uint8_t ucDummy4;
  811. #endif
  812. portMUX_TYPE muxDummy; //Mutex required due to SMP
  813. } StaticEventGroup_t;
  814. /*
  815. * In line with software engineering best practice, especially when supplying a
  816. * library that is likely to change in future versions, FreeRTOS implements a
  817. * strict data hiding policy. This means the software timer structure used
  818. * internally by FreeRTOS is not accessible to application code. However, if
  819. * the application writer wants to statically allocate the memory required to
  820. * create a software timer then the size of the queue object needs to be know.
  821. * The StaticTimer_t structure below is provided for this purpose. Its sizes
  822. * and alignment requirements are guaranteed to match those of the genuine
  823. * structure, no matter which architecture is being used, and no matter how the
  824. * values in FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in
  825. * the hope users will recognise that it would be unwise to make direct use of
  826. * the structure members.
  827. */
  828. typedef struct xSTATIC_TIMER
  829. {
  830. void *pvDummy1;
  831. StaticListItem_t xDummy2;
  832. TickType_t xDummy3;
  833. UBaseType_t uxDummy4;
  834. void *pvDummy5[ 2 ];
  835. #if( configUSE_TRACE_FACILITY == 1 )
  836. UBaseType_t uxDummy6;
  837. #endif
  838. #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  839. uint8_t ucDummy7;
  840. #endif
  841. } StaticTimer_t;
  842. #ifdef __cplusplus
  843. }
  844. #endif
  845. #endif /* INC_FREERTOS_H */