/* * FreeRTOS Kernel V10.3.1 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * http://www.FreeRTOS.org * http://aws.amazon.com/freertos * * 1 tab == 4 spaces! *//* ... */#ifndefINC_FREERTOS_H#defineINC_FREERTOS_H/* * Include the generic headers required for the FreeRTOS port being used. *//* ... */#include<stddef.h>/* * If stdint.h cannot be located then: * + If using GCC ensure the -nostdint options is *not* being used. * + Ensure the project's include path includes the directory in which your * compiler stores stdint.h. * + Set any compiler options necessary for it to support C99, as technically * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any * other way). * + The FreeRTOS download includes a simple stdint.h definition that can be * used in cases where none is provided by the compiler. The files only * contains the typedefs required to build FreeRTOS. Read the instructions * in FreeRTOS/source/stdint.readme for more information. *//* ... */#include<stdint.h>/* READ COMMENT ABOVE. */#ifdef__cplusplusextern"C"{#endif/* Application specific configuration options. */#include"FreeRTOSConfig.h"/* Basic FreeRTOS definitions. */#include"projdefs.h"/* Definitions specific to the port being used. */#include"portable.h"/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */#ifndefconfigUSE_NEWLIB_REENTRANT#defineconfigUSE_NEWLIB_REENTRANT0#endif/* Required if struct _reent is used. */#if(configUSE_NEWLIB_REENTRANT==1)#include<reent.h>#endif/* * Check all the required application specific macros have been defined. * These macros are application specific and (as downloaded) are defined * within FreeRTOSConfig.h. *//* ... */#ifndefconfigMINIMAL_STACK_SIZE#errorMissingdefinition:configMINIMAL_STACK_SIZEmustbedefinedinFreeRTOSConfig.h.configMINIMAL_STACK_SIZEdefinesthesize(inwords)ofthestackallocatedtotheidletask.Refertothedemoprojectprovidedforyourportforasuitablevalue.#endif#ifndefconfigMAX_PRIORITIES#errorMissingdefinition:configMAX_PRIORITIESmustbedefinedinFreeRTOSConfig.h.SeetheConfigurationsectionoftheFreeRTOSAPIdocumentationfordetails.#endif#ifconfigMAX_PRIORITIES<1#errorconfigMAX_PRIORITIESmustbedefinedtobegreaterthanorequalto1.#endif#ifndefconfigUSE_PREEMPTION#errorMissingdefinition:configUSE_PREEMPTIONmustbedefinedinFreeRTOSConfig.haseither1or0.SeetheConfigurationsectionoftheFreeRTOSAPIdocumentationfordetails.#endif#ifndefconfigUSE_IDLE_HOOK#errorMissingdefinition:configUSE_IDLE_HOOKmustbedefinedinFreeRTOSConfig.haseither1or0.SeetheConfigurationsectionoftheFreeRTOSAPIdocumentationfordetails.#endif#ifndefconfigUSE_TICK_HOOK#errorMissingdefinition:configUSE_TICK_HOOKmustbedefinedinFreeRTOSConfig.haseither1or0.SeetheConfigurationsectionoftheFreeRTOSAPIdocumentationfordetails.#endif#ifndefconfigUSE_16_BIT_TICKS#errorMissingdefinition:configUSE_16_BIT_TICKSmustbedefinedinFreeRTOSConfig.haseither1or0.SeetheConfigurationsectionoftheFreeRTOSAPIdocumentationfordetails.#endif#ifndefconfigUSE_CO_ROUTINES#defineconfigUSE_CO_ROUTINES0#endif#ifndefINCLUDE_vTaskPrioritySet#defineINCLUDE_vTaskPrioritySet0#endif#ifndefINCLUDE_uxTaskPriorityGet#defineINCLUDE_uxTaskPriorityGet0#endif#ifndefINCLUDE_vTaskDelete#defineINCLUDE_vTaskDelete0#endif#ifndefINCLUDE_vTaskSuspend#defineINCLUDE_vTaskSuspend0#endif#ifndefINCLUDE_vTaskDelayUntil#defineINCLUDE_vTaskDelayUntil0#endif#ifndefINCLUDE_vTaskDelay#defineINCLUDE_vTaskDelay0#endif#ifndefINCLUDE_xTaskGetIdleTaskHandle#defineINCLUDE_xTaskGetIdleTaskHandle0#endif#ifndefINCLUDE_xTaskAbortDelay#defineINCLUDE_xTaskAbortDelay0#endif#ifndefINCLUDE_xQueueGetMutexHolder#defineINCLUDE_xQueueGetMutexHolder0#endif#ifndefINCLUDE_xSemaphoreGetMutexHolder#defineINCLUDE_xSemaphoreGetMutexHolderINCLUDE_xQueueGetMutexHolder#endif#ifndefINCLUDE_xTaskGetHandle#defineINCLUDE_xTaskGetHandle0#endif#ifndefINCLUDE_uxTaskGetStackHighWaterMark#defineINCLUDE_uxTaskGetStackHighWaterMark0#endif#ifndefINCLUDE_uxTaskGetStackHighWaterMark2#defineINCLUDE_uxTaskGetStackHighWaterMark20#endif#ifndefINCLUDE_eTaskGetState#defineINCLUDE_eTaskGetState0#endif#ifndefINCLUDE_xTaskResumeFromISR#defineINCLUDE_xTaskResumeFromISR1#endif#ifndefINCLUDE_xTimerPendFunctionCall#defineINCLUDE_xTimerPendFunctionCall0#endif#ifndefINCLUDE_xTaskGetSchedulerState#defineINCLUDE_xTaskGetSchedulerState0#endif#ifndefINCLUDE_xTaskGetCurrentTaskHandle#defineINCLUDE_xTaskGetCurrentTaskHandle0#endif#ifconfigUSE_CO_ROUTINES!=0#ifndefconfigMAX_CO_ROUTINE_PRIORITIES#errorconfigMAX_CO_ROUTINE_PRIORITIESmustbegreaterthanorequalto1.#endif/* ... */#endif#ifndefconfigUSE_DAEMON_TASK_STARTUP_HOOK#defineconfigUSE_DAEMON_TASK_STARTUP_HOOK0#endif#ifndefconfigUSE_APPLICATION_TASK_TAG#defineconfigUSE_APPLICATION_TASK_TAG0#endif#ifndefconfigNUM_THREAD_LOCAL_STORAGE_POINTERS#defineconfigNUM_THREAD_LOCAL_STORAGE_POINTERS0#endif#ifndefconfigUSE_RECURSIVE_MUTEXES#defineconfigUSE_RECURSIVE_MUTEXES0#endif#ifndefconfigUSE_MUTEXES#defineconfigUSE_MUTEXES0#endif#ifndefconfigUSE_TIMERS#defineconfigUSE_TIMERS0#endif#ifndefconfigUSE_COUNTING_SEMAPHORES#defineconfigUSE_COUNTING_SEMAPHORES0#endif#ifndefconfigUSE_ALTERNATIVE_API#defineconfigUSE_ALTERNATIVE_API0#endif#ifndefportCRITICAL_NESTING_IN_TCB#defineportCRITICAL_NESTING_IN_TCB0#endif#ifndefconfigMAX_TASK_NAME_LEN#defineconfigMAX_TASK_NAME_LEN16#endif#ifndefconfigIDLE_SHOULD_YIELD#defineconfigIDLE_SHOULD_YIELD1#endif#ifconfigMAX_TASK_NAME_LEN<1#errorconfigMAX_TASK_NAME_LENmustbesettoaminimumof1inFreeRTOSConfig.h#endif#ifndefconfigASSERT#defineconfigASSERT(x)#defineconfigASSERT_DEFINED0/* ... */#else#defineconfigASSERT_DEFINED1#endif/* configPRECONDITION should be defined as configASSERT.The CBMC proofs need a way to track assumptions and assertions.A configPRECONDITION statement should express an implicit invariant orassumption made. A configASSERT statement should express an invariant that musthold explicit before calling the code. *//* ... */#ifndefconfigPRECONDITION#defineconfigPRECONDITION(X)configASSERT(X)#defineconfigPRECONDITION_DEFINED0/* ... */#else#defineconfigPRECONDITION_DEFINED1#endif#ifndefportMEMORY_BARRIER#defineportMEMORY_BARRIER()#endif#ifndefportSOFTWARE_BARRIER#defineportSOFTWARE_BARRIER()#endif/* The timers module relies on xTaskGetSchedulerState(). */#ifconfigUSE_TIMERS==1#ifndefconfigTIMER_TASK_PRIORITY#errorIfconfigUSE_TIMERSissetto1thenconfigTIMER_TASK_PRIORITYmustalsobedefined.#endif/* configTIMER_TASK_PRIORITY */#ifndefconfigTIMER_QUEUE_LENGTH#errorIfconfigUSE_TIMERSissetto1thenconfigTIMER_QUEUE_LENGTHmustalsobedefined.#endif/* configTIMER_QUEUE_LENGTH */#ifndefconfigTIMER_TASK_STACK_DEPTH#errorIfconfigUSE_TIMERSissetto1thenconfigTIMER_TASK_STACK_DEPTHmustalsobedefined.#endif/* configTIMER_TASK_STACK_DEPTH *//* ... */#endif/* configUSE_TIMERS */#ifndefportSET_INTERRUPT_MASK_FROM_ISR#defineportSET_INTERRUPT_MASK_FROM_ISR()0#endif#ifndefportCLEAR_INTERRUPT_MASK_FROM_ISR#defineportCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedStatusValue)(void)uxSavedStatusValue#endif#ifndefportCLEAN_UP_TCB#defineportCLEAN_UP_TCB(pxTCB)(void)pxTCB#endif#ifndefportPRE_TASK_DELETE_HOOK#defineportPRE_TASK_DELETE_HOOK(pvTaskToDelete,pxYieldPending)#endif#ifndefportSETUP_TCB#defineportSETUP_TCB(pxTCB)(void)pxTCB#endif#ifndefconfigQUEUE_REGISTRY_SIZE#defineconfigQUEUE_REGISTRY_SIZE0U#endif#if(configQUEUE_REGISTRY_SIZE<1)#definevQueueAddToRegistry(xQueue,pcName)#definevQueueUnregisterQueue(xQueue)#definepcQueueGetName(xQueue)/* ... */#endif#ifndefportPOINTER_SIZE_TYPE#defineportPOINTER_SIZE_TYPEuint32_t#endif/* Remove any unused trace macros. */#ifndeftraceSTART/* Used to perform any necessary initialisation - for example, open a file into which trace is to be written. *//* ... */#definetraceSTART()/* ... */#endif#ifndeftraceEND/* Use to close a trace, for example close a file into which trace has been written. *//* ... */#definetraceEND()/* ... */#endif#ifndeftraceTASK_SWITCHED_IN/* Called after a task has been selected to run. pxCurrentTCB holds a pointer to the task control block of the selected task. *//* ... */#definetraceTASK_SWITCHED_IN()/* ... */#endif#ifndeftraceINCREASE_TICK_COUNT/* Called before stepping the tick count after waking from tickless idle sleep. *//* ... */#definetraceINCREASE_TICK_COUNT(x)/* ... */#endif#ifndeftraceLOW_POWER_IDLE_BEGIN/* Called immediately before entering tickless idle. */#definetraceLOW_POWER_IDLE_BEGIN()/* ... */#endif#ifndeftraceLOW_POWER_IDLE_END/* Called when returning to the Idle task after a tickless idle. */#definetraceLOW_POWER_IDLE_END()/* ... */#endif#ifndeftraceTASK_SWITCHED_OUT/* Called before a task has been selected to run. pxCurrentTCB holds a pointer to the task control block of the task being switched out. *//* ... */#definetraceTASK_SWITCHED_OUT()/* ... */#endif#ifndeftraceTASK_PRIORITY_INHERIT/* Called when a task attempts to take a mutex that is already held by a lower priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task that holds the mutex. uxInheritedPriority is the priority the mutex holder will inherit (the priority of the task that is attempting to obtain the muted. *//* ... */#definetraceTASK_PRIORITY_INHERIT(pxTCBOfMutexHolder,uxInheritedPriority)/* ... */#endif#ifndeftraceTASK_PRIORITY_DISINHERIT/* Called when a task releases a mutex, the holding of which had resulted in the task inheriting the priority of a higher priority task. pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the mutex. uxOriginalPriority is the task's configured (base) priority. *//* ... */#definetraceTASK_PRIORITY_DISINHERIT(pxTCBOfMutexHolder,uxOriginalPriority)/* ... */#endif#ifndeftraceBLOCKING_ON_QUEUE_RECEIVE/* Task is about to block because it cannot read from a queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore upon which the read was attempted. pxCurrentTCB points to the TCB of the task that attempted the read. *//* ... */#definetraceBLOCKING_ON_QUEUE_RECEIVE(pxQueue)/* ... */#endif#ifndeftraceBLOCKING_ON_QUEUE_PEEK/* Task is about to block because it cannot read from a queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore upon which the read was attempted. pxCurrentTCB points to the TCB of the task that attempted the read. *//* ... */#definetraceBLOCKING_ON_QUEUE_PEEK(pxQueue)/* ... */#endif#ifndeftraceBLOCKING_ON_QUEUE_SEND/* Task is about to block because it cannot write to a queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore upon which the write was attempted. pxCurrentTCB points to the TCB of the task that attempted the write. *//* ... */#definetraceBLOCKING_ON_QUEUE_SEND(pxQueue)/* ... */#endif#ifndefconfigCHECK_FOR_STACK_OVERFLOW#defineconfigCHECK_FOR_STACK_OVERFLOW0#endif#ifndefconfigRECORD_STACK_HIGH_ADDRESS#defineconfigRECORD_STACK_HIGH_ADDRESS0#endif#ifndefconfigINCLUDE_FREERTOS_TASK_C_ADDITIONS_H#defineconfigINCLUDE_FREERTOS_TASK_C_ADDITIONS_H0#endif/* The following event macros are embedded in the kernel API calls. */#ifndeftraceMOVED_TASK_TO_READY_STATE#definetraceMOVED_TASK_TO_READY_STATE(pxTCB)#endif#ifndeftracePOST_MOVED_TASK_TO_READY_STATE#definetracePOST_MOVED_TASK_TO_READY_STATE(pxTCB)#endif#ifndeftraceQUEUE_CREATE#definetraceQUEUE_CREATE(pxNewQueue)#endif#ifndeftraceQUEUE_CREATE_FAILED#definetraceQUEUE_CREATE_FAILED(ucQueueType)#endif#ifndeftraceCREATE_MUTEX#definetraceCREATE_MUTEX(pxNewQueue)#endif#ifndeftraceCREATE_MUTEX_FAILED#definetraceCREATE_MUTEX_FAILED()#endif#ifndeftraceGIVE_MUTEX_RECURSIVE#definetraceGIVE_MUTEX_RECURSIVE(pxMutex)#endif#ifndeftraceGIVE_MUTEX_RECURSIVE_FAILED#definetraceGIVE_MUTEX_RECURSIVE_FAILED(pxMutex)#endif#ifndeftraceTAKE_MUTEX_RECURSIVE#definetraceTAKE_MUTEX_RECURSIVE(pxMutex)#endif#ifndeftraceTAKE_MUTEX_RECURSIVE_FAILED#definetraceTAKE_MUTEX_RECURSIVE_FAILED(pxMutex)#endif#ifndeftraceCREATE_COUNTING_SEMAPHORE#definetraceCREATE_COUNTING_SEMAPHORE()#endif#ifndeftraceCREATE_COUNTING_SEMAPHORE_FAILED#definetraceCREATE_COUNTING_SEMAPHORE_FAILED()#endif#ifndeftraceQUEUE_SEND#definetraceQUEUE_SEND(pxQueue)#endif#ifndeftraceQUEUE_SEND_FAILED#definetraceQUEUE_SEND_FAILED(pxQueue)#endif#ifndeftraceQUEUE_RECEIVE#definetraceQUEUE_RECEIVE(pxQueue)#endif#ifndeftraceQUEUE_PEEK#definetraceQUEUE_PEEK(pxQueue)#endif#ifndeftraceQUEUE_PEEK_FAILED#definetraceQUEUE_PEEK_FAILED(pxQueue)#endif#ifndeftraceQUEUE_PEEK_FROM_ISR#definetraceQUEUE_PEEK_FROM_ISR(pxQueue)#endif#ifndeftraceQUEUE_RECEIVE_FAILED#definetraceQUEUE_RECEIVE_FAILED(pxQueue)#endif#ifndeftraceQUEUE_SEND_FROM_ISR#definetraceQUEUE_SEND_FROM_ISR(pxQueue)#endif#ifndeftraceQUEUE_SEND_FROM_ISR_FAILED#definetraceQUEUE_SEND_FROM_ISR_FAILED(pxQueue)#endif#ifndeftraceQUEUE_RECEIVE_FROM_ISR#definetraceQUEUE_RECEIVE_FROM_ISR(pxQueue)#endif#ifndeftraceQUEUE_RECEIVE_FROM_ISR_FAILED#definetraceQUEUE_RECEIVE_FROM_ISR_FAILED(pxQueue)#endif#ifndeftraceQUEUE_PEEK_FROM_ISR_FAILED#definetraceQUEUE_PEEK_FROM_ISR_FAILED(pxQueue)#endif#ifndeftraceQUEUE_DELETE#definetraceQUEUE_DELETE(pxQueue)#endif#ifndeftraceTASK_CREATE#definetraceTASK_CREATE(pxNewTCB)#endif#ifndeftraceTASK_CREATE_FAILED#definetraceTASK_CREATE_FAILED()#endif#ifndeftraceTASK_DELETE#definetraceTASK_DELETE(pxTaskToDelete)#endif#ifndeftraceTASK_DELAY_UNTIL#definetraceTASK_DELAY_UNTIL(x)#endif#ifndeftraceTASK_DELAY#definetraceTASK_DELAY()#endif#ifndeftraceTASK_PRIORITY_SET#definetraceTASK_PRIORITY_SET(pxTask,uxNewPriority)#endif#ifndeftraceTASK_SUSPEND#definetraceTASK_SUSPEND(pxTaskToSuspend)#endif#ifndeftraceTASK_RESUME#definetraceTASK_RESUME(pxTaskToResume)#endif#ifndeftraceTASK_RESUME_FROM_ISR#definetraceTASK_RESUME_FROM_ISR(pxTaskToResume)#endif#ifndeftraceTASK_INCREMENT_TICK#definetraceTASK_INCREMENT_TICK(xTickCount)#endif#ifndeftraceTIMER_CREATE#definetraceTIMER_CREATE(pxNewTimer)#endif#ifndeftraceTIMER_CREATE_FAILED#definetraceTIMER_CREATE_FAILED()#endif#ifndeftraceTIMER_COMMAND_SEND#definetraceTIMER_COMMAND_SEND(xTimer,xMessageID,xMessageValueValue,xReturn)#endif#ifndeftraceTIMER_EXPIRED#definetraceTIMER_EXPIRED(pxTimer)#endif#ifndeftraceTIMER_COMMAND_RECEIVED#definetraceTIMER_COMMAND_RECEIVED(pxTimer,xMessageID,xMessageValue)#endif#ifndeftraceMALLOC#definetraceMALLOC(pvAddress,uiSize)#endif#ifndeftraceFREE#definetraceFREE(pvAddress,uiSize)#endif#ifndeftraceEVENT_GROUP_CREATE#definetraceEVENT_GROUP_CREATE(xEventGroup)#endif#ifndeftraceEVENT_GROUP_CREATE_FAILED#definetraceEVENT_GROUP_CREATE_FAILED()#endif#ifndeftraceEVENT_GROUP_SYNC_BLOCK#definetraceEVENT_GROUP_SYNC_BLOCK(xEventGroup,uxBitsToSet,uxBitsToWaitFor)#endif#ifndeftraceEVENT_GROUP_SYNC_END#definetraceEVENT_GROUP_SYNC_END(xEventGroup,uxBitsToSet,uxBitsToWaitFor,xTimeoutOccurred)(void)xTimeoutOccurred#endif#ifndeftraceEVENT_GROUP_WAIT_BITS_BLOCK#definetraceEVENT_GROUP_WAIT_BITS_BLOCK(xEventGroup,uxBitsToWaitFor)#endif#ifndeftraceEVENT_GROUP_WAIT_BITS_END#definetraceEVENT_GROUP_WAIT_BITS_END(xEventGroup,uxBitsToWaitFor,xTimeoutOccurred)(void)xTimeoutOccurred#endif#ifndeftraceEVENT_GROUP_CLEAR_BITS#definetraceEVENT_GROUP_CLEAR_BITS(xEventGroup,uxBitsToClear)#endif#ifndeftraceEVENT_GROUP_CLEAR_BITS_FROM_ISR#definetraceEVENT_GROUP_CLEAR_BITS_FROM_ISR(xEventGroup,uxBitsToClear)#endif#ifndeftraceEVENT_GROUP_SET_BITS#definetraceEVENT_GROUP_SET_BITS(xEventGroup,uxBitsToSet)#endif#ifndeftraceEVENT_GROUP_SET_BITS_FROM_ISR#definetraceEVENT_GROUP_SET_BITS_FROM_ISR(xEventGroup,uxBitsToSet)#endif#ifndeftraceEVENT_GROUP_DELETE#definetraceEVENT_GROUP_DELETE(xEventGroup)#endif#ifndeftracePEND_FUNC_CALL#definetracePEND_FUNC_CALL(xFunctionToPend,pvParameter1,ulParameter2,ret)#endif#ifndeftracePEND_FUNC_CALL_FROM_ISR#definetracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend,pvParameter1,ulParameter2,ret)#endif#ifndeftraceQUEUE_REGISTRY_ADD#definetraceQUEUE_REGISTRY_ADD(xQueue,pcQueueName)#endif#ifndeftraceTASK_NOTIFY_TAKE_BLOCK#definetraceTASK_NOTIFY_TAKE_BLOCK()#endif#ifndeftraceTASK_NOTIFY_TAKE#definetraceTASK_NOTIFY_TAKE()#endif#ifndeftraceTASK_NOTIFY_WAIT_BLOCK#definetraceTASK_NOTIFY_WAIT_BLOCK()#endif#ifndeftraceTASK_NOTIFY_WAIT#definetraceTASK_NOTIFY_WAIT()#endif#ifndeftraceTASK_NOTIFY#definetraceTASK_NOTIFY()#endif#ifndeftraceTASK_NOTIFY_FROM_ISR#definetraceTASK_NOTIFY_FROM_ISR()#endif#ifndeftraceTASK_NOTIFY_GIVE_FROM_ISR#definetraceTASK_NOTIFY_GIVE_FROM_ISR()#endif#ifndeftraceSTREAM_BUFFER_CREATE_FAILED#definetraceSTREAM_BUFFER_CREATE_FAILED(xIsMessageBuffer)#endif#ifndeftraceSTREAM_BUFFER_CREATE_STATIC_FAILED#definetraceSTREAM_BUFFER_CREATE_STATIC_FAILED(xReturn,xIsMessageBuffer)#endif#ifndeftraceSTREAM_BUFFER_CREATE#definetraceSTREAM_BUFFER_CREATE(pxStreamBuffer,xIsMessageBuffer)#endif#ifndeftraceSTREAM_BUFFER_DELETE#definetraceSTREAM_BUFFER_DELETE(xStreamBuffer)#endif#ifndeftraceSTREAM_BUFFER_RESET#definetraceSTREAM_BUFFER_RESET(xStreamBuffer)#endif#ifndeftraceBLOCKING_ON_STREAM_BUFFER_SEND#definetraceBLOCKING_ON_STREAM_BUFFER_SEND(xStreamBuffer)#endif#ifndeftraceSTREAM_BUFFER_SEND#definetraceSTREAM_BUFFER_SEND(xStreamBuffer,xBytesSent)#endif#ifndeftraceSTREAM_BUFFER_SEND_FAILED#definetraceSTREAM_BUFFER_SEND_FAILED(xStreamBuffer)#endif#ifndeftraceSTREAM_BUFFER_SEND_FROM_ISR#definetraceSTREAM_BUFFER_SEND_FROM_ISR(xStreamBuffer,xBytesSent)#endif#ifndeftraceBLOCKING_ON_STREAM_BUFFER_RECEIVE#definetraceBLOCKING_ON_STREAM_BUFFER_RECEIVE(xStreamBuffer)#endif#ifndeftraceSTREAM_BUFFER_RECEIVE#definetraceSTREAM_BUFFER_RECEIVE(xStreamBuffer,xReceivedLength)#endif#ifndeftraceSTREAM_BUFFER_RECEIVE_FAILED#definetraceSTREAM_BUFFER_RECEIVE_FAILED(xStreamBuffer)#endif#ifndeftraceSTREAM_BUFFER_RECEIVE_FROM_ISR#definetraceSTREAM_BUFFER_RECEIVE_FROM_ISR(xStreamBuffer,xReceivedLength)#endif#ifndefconfigGENERATE_RUN_TIME_STATS#defineconfigGENERATE_RUN_TIME_STATS0#endif#if(configGENERATE_RUN_TIME_STATS==1)#ifndefportCONFIGURE_TIMER_FOR_RUN_TIME_STATS#errorIfconfigGENERATE_RUN_TIME_STATSisdefinedthenportCONFIGURE_TIMER_FOR_RUN_TIME_STATSmustalsobedefined.portCONFIGURE_TIMER_FOR_RUN_TIME_STATSshouldcallaportlayerfunctiontosetupaperipheraltimer/counterthatcanthenbeusedastheruntimecountertimebase.#endif/* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */#ifndefportGET_RUN_TIME_COUNTER_VALUE#ifndefportALT_GET_RUN_TIME_COUNTER_VALUE#errorIfconfigGENERATE_RUN_TIME_STATSisdefinedtheneitherportGET_RUN_TIME_COUNTER_VALUEorportALT_GET_RUN_TIME_COUNTER_VALUEmustalsobedefined.SeetheexamplesprovidedandtheFreeRTOSwebsiteformoreinformation.#endif/* portALT_GET_RUN_TIME_COUNTER_VALUE *//* ... */#endif/* portGET_RUN_TIME_COUNTER_VALUE *//* ... */#endif/* configGENERATE_RUN_TIME_STATS */#ifndefportCONFIGURE_TIMER_FOR_RUN_TIME_STATS#defineportCONFIGURE_TIMER_FOR_RUN_TIME_STATS()#endif#ifndefconfigUSE_MALLOC_FAILED_HOOK#defineconfigUSE_MALLOC_FAILED_HOOK0#endif#ifndefportPRIVILEGE_BIT#defineportPRIVILEGE_BIT((UBaseType_t)0x00)#endif#ifndefportYIELD_WITHIN_API#defineportYIELD_WITHIN_APIportYIELD#endif#ifndefportSUPPRESS_TICKS_AND_SLEEP#defineportSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime)#endif#ifndefconfigEXPECTED_IDLE_TIME_BEFORE_SLEEP#defineconfigEXPECTED_IDLE_TIME_BEFORE_SLEEP2#endif#ifconfigEXPECTED_IDLE_TIME_BEFORE_SLEEP<2#errorconfigEXPECTED_IDLE_TIME_BEFORE_SLEEPmustnotbelessthan2#endif#ifndefconfigUSE_TICKLESS_IDLE#defineconfigUSE_TICKLESS_IDLE0#endif#ifndefconfigPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING#defineconfigPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING(x)#endif#ifndefconfigPRE_SLEEP_PROCESSING#defineconfigPRE_SLEEP_PROCESSING(x)#endif#ifndefconfigPOST_SLEEP_PROCESSING#defineconfigPOST_SLEEP_PROCESSING(x)#endif#ifndefconfigUSE_QUEUE_SETS#defineconfigUSE_QUEUE_SETS0#endif#ifndefportTASK_USES_FLOATING_POINT#defineportTASK_USES_FLOATING_POINT()#endif#ifndefportALLOCATE_SECURE_CONTEXT#defineportALLOCATE_SECURE_CONTEXT(ulSecureStackSize)#endif#ifndefportDONT_DISCARD#defineportDONT_DISCARD#endif#ifndefconfigUSE_TIME_SLICING#defineconfigUSE_TIME_SLICING1#endif#ifndefconfigINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS#defineconfigINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS0#endif#ifndefconfigUSE_STATS_FORMATTING_FUNCTIONS#defineconfigUSE_STATS_FORMATTING_FUNCTIONS0#endif#ifndefportASSERT_IF_INTERRUPT_PRIORITY_INVALID#defineportASSERT_IF_INTERRUPT_PRIORITY_INVALID()#endif#ifndefconfigUSE_TRACE_FACILITY#defineconfigUSE_TRACE_FACILITY0#endif#ifndefmtCOVERAGE_TEST_MARKER#definemtCOVERAGE_TEST_MARKER()#endif#ifndefmtCOVERAGE_TEST_DELAY#definemtCOVERAGE_TEST_DELAY()#endif#ifndefportASSERT_IF_IN_ISR#defineportASSERT_IF_IN_ISR()#endif#ifndefconfigUSE_PORT_OPTIMISED_TASK_SELECTION#defineconfigUSE_PORT_OPTIMISED_TASK_SELECTION0#endif#ifndefconfigAPPLICATION_ALLOCATED_HEAP#defineconfigAPPLICATION_ALLOCATED_HEAP0#endif#ifndefconfigUSE_TASK_NOTIFICATIONS#defineconfigUSE_TASK_NOTIFICATIONS1#endif#ifndefconfigUSE_POSIX_ERRNO#defineconfigUSE_POSIX_ERRNO0#endif#ifndefportTICK_TYPE_IS_ATOMIC#defineportTICK_TYPE_IS_ATOMIC0#endif#ifndefconfigSUPPORT_STATIC_ALLOCATION/* Defaults to 0 for backward compatibility. */#defineconfigSUPPORT_STATIC_ALLOCATION0/* ... */#endif#ifndefconfigSUPPORT_DYNAMIC_ALLOCATION/* Defaults to 1 for backward compatibility. */#defineconfigSUPPORT_DYNAMIC_ALLOCATION1/* ... */#endif#ifndefconfigSTACK_DEPTH_TYPE/* Defaults to uint16_t for backward compatibility, but can be overridden in FreeRTOSConfig.h if uint16_t is too restrictive. *//* ... */#defineconfigSTACK_DEPTH_TYPEuint16_t/* ... */#endif#ifndefconfigMESSAGE_BUFFER_LENGTH_TYPE/* Defaults to size_t for backward compatibility, but can be overridden in FreeRTOSConfig.h if lengths will always be less than the number of bytes in a size_t. *//* ... */#defineconfigMESSAGE_BUFFER_LENGTH_TYPEsize_t/* ... */#endif/* Sanity check the configuration. */#if(configUSE_TICKLESS_IDLE!=0)#if(INCLUDE_vTaskSuspend!=1)#errorINCLUDE_vTaskSuspendmustbesetto1ifconfigUSE_TICKLESS_IDLEisnotsetto0#endif/* INCLUDE_vTaskSuspend *//* ... */#endif/* configUSE_TICKLESS_IDLE */#if((configSUPPORT_STATIC_ALLOCATION==0)&&(configSUPPORT_DYNAMIC_ALLOCATION==0))#errorconfigSUPPORT_STATIC_ALLOCATIONandconfigSUPPORT_DYNAMIC_ALLOCATIONcannotbothbe0,butcanbothbe1.#endif#if((configUSE_RECURSIVE_MUTEXES==1)&&(configUSE_MUTEXES!=1))#errorconfigUSE_MUTEXESmustbesetto1touserecursivemutexes#endif#ifndefconfigINITIAL_TICK_COUNT#defineconfigINITIAL_TICK_COUNT0#endif#if(portTICK_TYPE_IS_ATOMIC==0)/* Either variables of tick type cannot be read atomically, or portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when the tick count is returned to the standard critical section macros. *//* ... */#defineportTICK_TYPE_ENTER_CRITICAL()portENTER_CRITICAL()#defineportTICK_TYPE_EXIT_CRITICAL()portEXIT_CRITICAL()#defineportTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR()portSET_INTERRUPT_MASK_FROM_ISR()#defineportTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR(x)portCLEAR_INTERRUPT_MASK_FROM_ISR((x))/* ... */#else/* The tick type can be read atomically, so critical sections used when the tick count is returned can be defined away. *//* ... */#defineportTICK_TYPE_ENTER_CRITICAL()#defineportTICK_TYPE_EXIT_CRITICAL()#defineportTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR()0#defineportTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR(x)(void)x/* ... */#endif/* Definitions to allow backward compatibility with FreeRTOS versions prior toV8 if desired. *//* ... */#ifndefconfigENABLE_BACKWARD_COMPATIBILITY#defineconfigENABLE_BACKWARD_COMPATIBILITY1#endif#ifndefconfigPRINTF/* configPRINTF() was not defined, so define it away to nothing. To use configPRINTF() then define it as follows (where MyPrintFunction() is provided by the application writer): void MyPrintFunction(const char *pcFormat, ... ); #define configPRINTF( X ) MyPrintFunction X Then call like a standard printf() function, but placing brackets around all parameters so they are passed as a single parameter. For example: configPRINTF( ("Value = %d", MyVariable) ); *//* ... */#defineconfigPRINTF(X)/* ... */#endif#ifndefconfigMAX/* The application writer has not provided their own MAX macro, so define the following generic implementation. *//* ... */#defineconfigMAX(a,b)(((a)>(b))?(a):(b))/* ... */#endif#ifndefconfigMIN/* The application writer has not provided their own MAX macro, so define the following generic implementation. *//* ... */#defineconfigMIN(a,b)(((a)<(b))?(a):(b))/* ... */#endif#ifconfigENABLE_BACKWARD_COMPATIBILITY==1#defineeTaskStateGeteTaskGetState#defineportTickTypeTickType_t#definexTaskHandleTaskHandle_t#definexQueueHandleQueueHandle_t#definexSemaphoreHandleSemaphoreHandle_t#definexQueueSetHandleQueueSetHandle_t#definexQueueSetMemberHandleQueueSetMemberHandle_t#definexTimeOutTypeTimeOut_t#definexMemoryRegionMemoryRegion_t#definexTaskParametersTaskParameters_t#definexTaskStatusTypeTaskStatus_t#definexTimerHandleTimerHandle_t#definexCoRoutineHandleCoRoutineHandle_t#definepdTASK_HOOK_CODETaskHookFunction_t#defineportTICK_RATE_MSportTICK_PERIOD_MS#definepcTaskGetTaskNamepcTaskGetName#definepcTimerGetTimerNamepcTimerGetName#definepcQueueGetQueueNamepcQueueGetName#definevTaskGetTaskInfovTaskGetInfo#definexTaskGetIdleRunTimeCounterulTaskGetIdleRunTimeCounter/* Backward compatibility within the scheduler code only - these definitions are not really required but are included for completeness. *//* ... */#definetmrTIMER_CALLBACKTimerCallbackFunction_t#definepdTASK_CODETaskFunction_t#definexListItemListItem_t#definexListList_t/* For libraries that break the list data hiding, and access list structure members directly (which is not supposed to be done). *//* ... */#definepxContainerpvContainer/* ... */#endif/* configENABLE_BACKWARD_COMPATIBILITY */#if(configUSE_ALTERNATIVE_API!=0)#errorThealternativeAPIwasdeprecatedsometimeago,andwasremovedinFreeRTOSV9.00#endif/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support evenif floating point hardware is otherwise supported by the FreeRTOS port in use.This constant is not supported by all FreeRTOS ports that include floatingpoint support. *//* ... */#ifndefconfigUSE_TASK_FPU_SUPPORT#defineconfigUSE_TASK_FPU_SUPPORT1#endif/* Set configENABLE_MPU to 1 to enable MPU support and 0 to disable it. This iscurrently used in ARMv8M ports. *//* ... */#ifndefconfigENABLE_MPU#defineconfigENABLE_MPU0#endif/* Set configENABLE_FPU to 1 to enable FPU support and 0 to disable it. This iscurrently used in ARMv8M ports. *//* ... */#ifndefconfigENABLE_FPU#defineconfigENABLE_FPU1#endif/* Set configENABLE_TRUSTZONE to 1 enable TrustZone support and 0 to disable it.This is currently used in ARMv8M ports. *//* ... */#ifndefconfigENABLE_TRUSTZONE#defineconfigENABLE_TRUSTZONE1#endif/* Set configRUN_FREERTOS_SECURE_ONLY to 1 to run the FreeRTOS ARMv8M port onthe Secure Side only. *//* ... */#ifndefconfigRUN_FREERTOS_SECURE_ONLY#defineconfigRUN_FREERTOS_SECURE_ONLY0#endif/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using * dynamically allocated RAM, in which case when any task is deleted it is known * that both the task's stack and TCB need to be freed. Sometimes the * FreeRTOSConfig.h settings only allow a task to be created using statically * allocated RAM, in which case when any task is deleted it is known that neither * the task's stack or TCB should be freed. Sometimes the FreeRTOSConfig.h * settings allow a task to be created using either statically or dynamically * allocated RAM, in which case a member of the TCB is used to record whether the * stack and/or TCB were allocated statically or dynamically, so when a task is * deleted the RAM that was allocated dynamically is freed again and no attempt is * made to free the RAM that was allocated statically. * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a * task to be created using either statically or dynamically allocated RAM. Note * that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with * a statically allocated stack and a dynamically allocated TCB. * * The following table lists various combinations of portUSING_MPU_WRAPPERS, * configSUPPORT_DYNAMIC_ALLOCATION and configSUPPORT_STATIC_ALLOCATION and * when it is possible to have both static and dynamic allocation: * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ * | MPU | Dynamic | Static | Available Functions | Possible Allocations | Both Dynamic and | Need Free | * | | | | | | Static Possible | | * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ * | 0 | 0 | 1 | xTaskCreateStatic | TCB - Static, Stack - Static | No | No | * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| * | 0 | 1 | 0 | xTaskCreate | TCB - Dynamic, Stack - Dynamic | No | Yes | * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| * | 0 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | * | | | | xTaskCreateStatic | 2. TCB - Static, Stack - Static | | | * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| * | 1 | 0 | 1 | xTaskCreateStatic, | TCB - Static, Stack - Static | No | No | * | | | | xTaskCreateRestrictedStatic | | | | * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| * | 1 | 1 | 0 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | * | | | | xTaskCreateRestricted | 2. TCB - Dynamic, Stack - Static | | | * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| * | 1 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | * | | | | xTaskCreateStatic, | 2. TCB - Dynamic, Stack - Static | | | * | | | | xTaskCreateRestricted, | 3. TCB - Static, Stack - Static | | | * | | | | xTaskCreateRestrictedStatic | | | | * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ *//* ... */#definetskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE(((portUSING_MPU_WRAPPERS==0)&&(configSUPPORT_DYNAMIC_ALLOCATION==1)&&(configSUPPORT_STATIC_ALLOCATION==1))||\((portUSING_MPU_WRAPPERS==1)&&(configSUPPORT_DYNAMIC_ALLOCATION==1))).../* * In line with software engineering best practice, FreeRTOS implements a strict * data hiding policy, so the real structures used by FreeRTOS to maintain the * state of tasks, queues, semaphores, etc. are not accessible to the application * code. However, if the application writer wants to statically allocate such * an object then the size of the object needs to be know. Dummy structures * that are guaranteed to have the same size and alignment requirements of the * real objects are used for this purpose. The dummy list and list item * structures below are used for inclusion in such a dummy structure. *//* ... */structxSTATIC_LIST_ITEM{#if(configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES==1)TickType_txDummy1;#endifTickType_txDummy2;void*pvDummy3[4];#if(configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES==1)TickType_txDummy4;#endif...};typedefstructxSTATIC_LIST_ITEMStaticListItem_t;/* See the comments above the struct xSTATIC_LIST_ITEM definition. */structxSTATIC_MINI_LIST_ITEM{#if(configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES==1)TickType_txDummy1;#endifTickType_txDummy2;void*pvDummy3[2];...};typedefstructxSTATIC_MINI_LIST_ITEMStaticMiniListItem_t;/* See the comments above the struct xSTATIC_LIST_ITEM definition. */typedefstructxSTATIC_LIST{#if(configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES==1)TickType_txDummy1;#endifUBaseType_tuxDummy2;void*pvDummy3;StaticMiniListItem_txDummy4;#if(configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES==1)TickType_txDummy5;#endif...}StaticList_t;/* * In line with software engineering best practice, especially when supplying a * library that is likely to change in future versions, FreeRTOS implements a * strict data hiding policy. This means the Task structure used internally by * FreeRTOS is not accessible to application code. However, if the application * writer wants to statically allocate the memory required to create a task then * the size of the task object needs to be know. The StaticTask_t structure * below is provided for this purpose. Its sizes and alignment requirements are * guaranteed to match those of the genuine structure, no matter which * architecture is being used, and no matter how the values in FreeRTOSConfig.h * are set. Its contents are somewhat obfuscated in the hope users will * recognise that it would be unwise to make direct use of the structure members. *//* ... */typedefstructxSTATIC_TCB{void*pxDummy1;#if(portUSING_MPU_WRAPPERS==1)xMPU_SETTINGSxDummy2;#endifStaticListItem_txDummy3[2];UBaseType_tuxDummy5;void*pxDummy6;uint8_tucDummy7[configMAX_TASK_NAME_LEN];#if((portSTACK_GROWTH>0)||(configRECORD_STACK_HIGH_ADDRESS==1))void*pxDummy8;#endif#if(portCRITICAL_NESTING_IN_TCB==1)UBaseType_tuxDummy9;#endif#if(configUSE_TRACE_FACILITY==1)UBaseType_tuxDummy10[2];#endif#if(configUSE_MUTEXES==1)UBaseType_tuxDummy12[2];#endif#if(configUSE_APPLICATION_TASK_TAG==1)void*pxDummy14;#endif#if(configNUM_THREAD_LOCAL_STORAGE_POINTERS>0)void*pvDummy15[configNUM_THREAD_LOCAL_STORAGE_POINTERS];#endif#if(configGENERATE_RUN_TIME_STATS==1)uint32_tulDummy16;#endif#if(configUSE_NEWLIB_REENTRANT==1)struct_reentxDummy17;#endif#if(configUSE_TASK_NOTIFICATIONS==1)uint32_tulDummy18;uint8_tucDummy19;/* ... */#endif#if(tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE!=0)uint8_tuxDummy20;#endif#if(INCLUDE_xTaskAbortDelay==1)uint8_tucDummy21;#endif#if(configUSE_POSIX_ERRNO==1)intiDummy22;#endif...}StaticTask_t;/* * In line with software engineering best practice, especially when supplying a * library that is likely to change in future versions, FreeRTOS implements a * strict data hiding policy. This means the Queue structure used internally by * FreeRTOS is not accessible to application code. However, if the application * writer wants to statically allocate the memory required to create a queue * then the size of the queue object needs to be know. The StaticQueue_t * structure below is provided for this purpose. Its sizes and alignment * requirements are guaranteed to match those of the genuine structure, no * matter which architecture is being used, and no matter how the values in * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope * users will recognise that it would be unwise to make direct use of the * structure members. *//* ... */typedefstructxSTATIC_QUEUE{void*pvDummy1[3];union{void*pvDummy2;UBaseType_tuxDummy2;...}u;StaticList_txDummy3[2];UBaseType_tuxDummy4[3];uint8_tucDummy5[2];#if((configSUPPORT_STATIC_ALLOCATION==1)&&(configSUPPORT_DYNAMIC_ALLOCATION==1))uint8_tucDummy6;#endif#if(configUSE_QUEUE_SETS==1)void*pvDummy7;#endif#if(configUSE_TRACE_FACILITY==1)UBaseType_tuxDummy8;uint8_tucDummy9;/* ... */#endif...}StaticQueue_t;typedefStaticQueue_tStaticSemaphore_t;/* * In line with software engineering best practice, especially when supplying a * library that is likely to change in future versions, FreeRTOS implements a * strict data hiding policy. This means the event group structure used * internally by FreeRTOS is not accessible to application code. However, if * the application writer wants to statically allocate the memory required to * create an event group then the size of the event group object needs to be * know. The StaticEventGroup_t structure below is provided for this purpose. * Its sizes and alignment requirements are guaranteed to match those of the * genuine structure, no matter which architecture is being used, and no matter * how the values in FreeRTOSConfig.h are set. Its contents are somewhat * obfuscated in the hope users will recognise that it would be unwise to make * direct use of the structure members. *//* ... */typedefstructxSTATIC_EVENT_GROUP{TickType_txDummy1;StaticList_txDummy2;#if(configUSE_TRACE_FACILITY==1)UBaseType_tuxDummy3;#endif#if((configSUPPORT_STATIC_ALLOCATION==1)&&(configSUPPORT_DYNAMIC_ALLOCATION==1))uint8_tucDummy4;#endif...}StaticEventGroup_t;/* * In line with software engineering best practice, especially when supplying a * library that is likely to change in future versions, FreeRTOS implements a * strict data hiding policy. This means the software timer structure used * internally by FreeRTOS is not accessible to application code. However, if * the application writer wants to statically allocate the memory required to * create a software timer then the size of the queue object needs to be know. * The StaticTimer_t structure below is provided for this purpose. Its sizes * and alignment requirements are guaranteed to match those of the genuine * structure, no matter which architecture is being used, and no matter how the * values in FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in * the hope users will recognise that it would be unwise to make direct use of * the structure members. *//* ... */typedefstructxSTATIC_TIMER{void*pvDummy1;StaticListItem_txDummy2;TickType_txDummy3;void*pvDummy5;TaskFunction_tpvDummy6;#if(configUSE_TRACE_FACILITY==1)UBaseType_tuxDummy7;#endifuint8_tucDummy8;...}StaticTimer_t;/** In line with software engineering best practice, especially when supplying a* library that is likely to change in future versions, FreeRTOS implements a* strict data hiding policy. This means the stream buffer structure used* internally by FreeRTOS is not accessible to application code. However, if* the application writer wants to statically allocate the memory required to* create a stream buffer then the size of the stream buffer object needs to be* know. The StaticStreamBuffer_t structure below is provided for this purpose.* Its size and alignment requirements are guaranteed to match those of the* genuine structure, no matter which architecture is being used, and no matter* how the values in FreeRTOSConfig.h are set. Its contents are somewhat* obfuscated in the hope users will recognise that it would be unwise to make* direct use of the structure members.*//* ... */typedefstructxSTATIC_STREAM_BUFFER{size_tuxDummy1[4];void*pvDummy2[3];uint8_tucDummy3;#if(configUSE_TRACE_FACILITY==1)UBaseType_tuxDummy4;#endif...}StaticStreamBuffer_t;/* Message buffers are built on stream buffers. */typedefStaticStreamBuffer_tStaticMessageBuffer_t;#ifdef__cplusplus}extern "C" { ... }#endif/* ... */#endif/* INC_FREERTOS_H */
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.