/*\r
- FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.\r
- All rights reserved\r
-\r
- VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
-\r
- This file is part of the FreeRTOS distribution.\r
-\r
- FreeRTOS is free software; you can redistribute it and/or modify it under\r
- the terms of the GNU General Public License (version 2) as published by the\r
- Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
-\r
- ***************************************************************************\r
- >>! NOTE: The modification to the GPL is included to allow you to !<<\r
- >>! distribute a combined work that includes FreeRTOS without being !<<\r
- >>! obliged to provide the source code for proprietary components !<<\r
- >>! outside of the FreeRTOS kernel. !<<\r
- ***************************************************************************\r
-\r
- FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
- FOR A PARTICULAR PURPOSE. Full license text is available on the following\r
- link: http://www.freertos.org/a00114.html\r
-\r
- ***************************************************************************\r
- * *\r
- * FreeRTOS provides completely free yet professionally developed, *\r
- * robust, strictly quality controlled, supported, and cross *\r
- * platform software that is more than just the market leader, it *\r
- * is the industry's de facto standard. *\r
- * *\r
- * Help yourself get started quickly while simultaneously helping *\r
- * to support the FreeRTOS project by purchasing a FreeRTOS *\r
- * tutorial book, reference manual, or both: *\r
- * http://www.FreeRTOS.org/Documentation *\r
- * *\r
- ***************************************************************************\r
-\r
- http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading\r
- the FAQ page "My application does not run, what could be wrong?". Have you\r
- defined configASSERT()?\r
-\r
- http://www.FreeRTOS.org/support - In return for receiving this top quality\r
- embedded software for free we request you assist our global community by\r
- participating in the support forum.\r
-\r
- http://www.FreeRTOS.org/training - Investing in training allows your team to\r
- be as productive as possible as early as possible. Now you can receive\r
- FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
- Ltd, and the world's leading authority on the world's leading RTOS.\r
-\r
- http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
- including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
- compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
-\r
- http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
- Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
-\r
- http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
- Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS\r
- licenses offer ticketed support, indemnification and commercial middleware.\r
-\r
- http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
- engineered and independently SIL3 certified version for use in safety and\r
- mission critical applications that require provable dependability.\r
-\r
- 1 tab == 4 spaces!\r
-*/\r
+ * FreeRTOS Kernel V10.0.1\r
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+ * this software and associated documentation files (the "Software"), to deal in\r
+ * the Software without restriction, including without limitation the rights to\r
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+ * the Software, and to permit persons to whom the Software is furnished to do so,\r
+ * subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in all\r
+ * copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ *\r
+ * http://www.FreeRTOS.org\r
+ * http://aws.amazon.com/freertos\r
+ *\r
+ * 1 tab == 4 spaces!\r
+ */\r
\r
#ifndef INC_FREERTOS_H\r
#define INC_FREERTOS_H\r
/* Definitions specific to the port being used. */\r
#include "portable.h"\r
\r
+/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */\r
+#ifndef configUSE_NEWLIB_REENTRANT\r
+ #define configUSE_NEWLIB_REENTRANT 0\r
+#endif\r
+\r
+/* Required if struct _reent is used. */\r
+#if ( configUSE_NEWLIB_REENTRANT == 1 )\r
+ #include <reent.h>\r
+#endif\r
/*\r
* Check all the required application specific macros have been defined.\r
* These macros are application specific and (as downloaded) are defined\r
#error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details.\r
#endif\r
\r
+#if configMAX_PRIORITIES < 1\r
+ #error configMAX_PRIORITIES must be defined to be greater than or equal to 1.\r
+#endif\r
+\r
#ifndef configUSE_PREEMPTION\r
#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.\r
#endif\r
#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.\r
#endif\r
\r
-#ifndef configMAX_PRIORITIES\r
- #error configMAX_PRIORITIES must be defined to be greater than or equal to 1.\r
-#endif\r
-\r
#ifndef configUSE_CO_ROUTINES\r
#define configUSE_CO_ROUTINES 0\r
#endif\r
#define INCLUDE_xTaskAbortDelay 0\r
#endif\r
\r
-#ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle\r
- #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0\r
-#endif\r
-\r
#ifndef INCLUDE_xQueueGetMutexHolder\r
#define INCLUDE_xQueueGetMutexHolder 0\r
#endif\r
#define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder\r
#endif\r
\r
-#ifndef INCLUDE_pcTaskGetTaskName\r
- #define INCLUDE_pcTaskGetTaskName 0\r
-#endif\r
-\r
-#ifndef INCLUDE_xTaskGetTaskHandle\r
- #define INCLUDE_xTaskGetTaskHandle 0\r
+#ifndef INCLUDE_xTaskGetHandle\r
+ #define INCLUDE_xTaskGetHandle 0\r
#endif\r
\r
#ifndef INCLUDE_uxTaskGetStackHighWaterMark\r
#if ( configQUEUE_REGISTRY_SIZE < 1 )\r
#define vQueueAddToRegistry( xQueue, pcName )\r
#define vQueueUnregisterQueue( xQueue )\r
- #define pcQueueGetQueueName( xQueue )\r
+ #define pcQueueGetName( xQueue )\r
#endif\r
\r
#ifndef portPOINTER_SIZE_TYPE\r
#define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )\r
#endif\r
\r
+#ifndef traceBLOCKING_ON_QUEUE_PEEK\r
+ /* Task is about to block because it cannot read from a\r
+ queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore\r
+ upon which the read was attempted. pxCurrentTCB points to the TCB of the\r
+ task that attempted the read. */\r
+ #define traceBLOCKING_ON_QUEUE_PEEK( pxQueue )\r
+#endif\r
+\r
#ifndef traceBLOCKING_ON_QUEUE_SEND\r
/* Task is about to block because it cannot write to a\r
queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore\r
#define configCHECK_FOR_STACK_OVERFLOW 0\r
#endif\r
\r
+#ifndef configRECORD_STACK_HIGH_ADDRESS\r
+ #define configRECORD_STACK_HIGH_ADDRESS 0\r
+#endif\r
+\r
+#ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H\r
+ #define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H 0\r
+#endif\r
+\r
/* The following event macros are embedded in the kernel API calls. */\r
\r
#ifndef traceMOVED_TASK_TO_READY_STATE\r
#define traceQUEUE_PEEK( pxQueue )\r
#endif\r
\r
+#ifndef traceQUEUE_PEEK_FAILED\r
+ #define traceQUEUE_PEEK_FAILED( pxQueue )\r
+#endif\r
+\r
#ifndef traceQUEUE_PEEK_FROM_ISR\r
#define traceQUEUE_PEEK_FROM_ISR( pxQueue )\r
#endif\r
#define traceTASK_NOTIFY_GIVE_FROM_ISR()\r
#endif\r
\r
+#ifndef traceSTREAM_BUFFER_CREATE_FAILED\r
+ #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_CREATE_STATIC_FAILED\r
+ #define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_CREATE\r
+ #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_DELETE\r
+ #define traceSTREAM_BUFFER_DELETE( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_RESET\r
+ #define traceSTREAM_BUFFER_RESET( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceBLOCKING_ON_STREAM_BUFFER_SEND\r
+ #define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_SEND\r
+ #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_SEND_FAILED\r
+ #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_SEND_FROM_ISR\r
+ #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent )\r
+#endif\r
+\r
+#ifndef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE\r
+ #define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_RECEIVE\r
+ #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_RECEIVE_FAILED\r
+ #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer )\r
+#endif\r
+\r
+#ifndef traceSTREAM_BUFFER_RECEIVE_FROM_ISR\r
+ #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength )\r
+#endif\r
+\r
#ifndef configGENERATE_RUN_TIME_STATS\r
#define configGENERATE_RUN_TIME_STATS 0\r
#endif\r
#define portYIELD_WITHIN_API portYIELD\r
#endif\r
\r
-#ifndef pvPortMallocAligned\r
- #define pvPortMallocAligned( x, puxPreallocatedBuffer ) ( ( ( puxPreallocatedBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxPreallocatedBuffer ) )\r
-#endif\r
-\r
-#ifndef vPortFreeAligned\r
- #define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )\r
-#endif\r
-\r
#ifndef portSUPPRESS_TICKS_AND_SLEEP\r
#define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )\r
#endif\r
#define configUSE_TICKLESS_IDLE 0\r
#endif\r
\r
+#ifndef configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING\r
+ #define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x )\r
+#endif\r
+\r
#ifndef configPRE_SLEEP_PROCESSING\r
#define configPRE_SLEEP_PROCESSING( x )\r
#endif\r
#define portTASK_USES_FLOATING_POINT()\r
#endif\r
\r
+#ifndef portTASK_CALLS_SECURE_FUNCTIONS\r
+ #define portTASK_CALLS_SECURE_FUNCTIONS()\r
+#endif\r
+\r
#ifndef configUSE_TIME_SLICING\r
#define configUSE_TIME_SLICING 1\r
#endif\r
#define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0\r
#endif\r
\r
-#ifndef configUSE_NEWLIB_REENTRANT\r
- #define configUSE_NEWLIB_REENTRANT 0\r
-#endif\r
-\r
#ifndef configUSE_STATS_FORMATTING_FUNCTIONS\r
#define configUSE_STATS_FORMATTING_FUNCTIONS 0\r
#endif\r
#endif\r
\r
#ifndef configSUPPORT_STATIC_ALLOCATION\r
+ /* Defaults to 0 for backward compatibility. */\r
#define configSUPPORT_STATIC_ALLOCATION 0\r
#endif\r
\r
+#ifndef configSUPPORT_DYNAMIC_ALLOCATION\r
+ /* Defaults to 1 for backward compatibility. */\r
+ #define configSUPPORT_DYNAMIC_ALLOCATION 1\r
+#endif\r
+\r
+#ifndef configSTACK_DEPTH_TYPE\r
+ /* Defaults to uint16_t for backward compatibility, but can be overridden\r
+ in FreeRTOSConfig.h if uint16_t is too restrictive. */\r
+ #define configSTACK_DEPTH_TYPE uint16_t\r
+#endif\r
+\r
+/* Sanity check the configuration. */\r
+#if( configUSE_TICKLESS_IDLE != 0 )\r
+ #if( INCLUDE_vTaskSuspend != 1 )\r
+ #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0\r
+ #endif /* INCLUDE_vTaskSuspend */\r
+#endif /* configUSE_TICKLESS_IDLE */\r
+\r
+#if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) )\r
+ #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1.\r
+#endif\r
+\r
#if( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) )\r
- #error configUSE_MUTEXES must be set to 1 to use recursive mutexes\r
+ #error configUSE_MUTEXES must be set to 1 to use recursive mutexes\r
+#endif\r
+\r
+#ifndef configINITIAL_TICK_COUNT\r
+ #define configINITIAL_TICK_COUNT 0\r
#endif\r
\r
#if( portTICK_TYPE_IS_ATOMIC == 0 )\r
#define configENABLE_BACKWARD_COMPATIBILITY 1\r
#endif\r
\r
+#ifndef configPRINTF\r
+ /* configPRINTF() was not defined, so define it away to nothing. To use\r
+ configPRINTF() then define it as follows (where MyPrintFunction() is\r
+ provided by the application writer):\r
+\r
+ void MyPrintFunction(const char *pcFormat, ... );\r
+ #define configPRINTF( X ) MyPrintFunction X\r
+\r
+ Then call like a standard printf() function, but placing brackets around\r
+ all parameters so they are passed as a single parameter. For example:\r
+ configPRINTF( ("Value = %d", MyVariable) ); */\r
+ #define configPRINTF( X )\r
+#endif\r
+\r
+#ifndef configMAX\r
+ /* The application writer has not provided their own MAX macro, so define\r
+ the following generic implementation. */\r
+ #define configMAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )\r
+#endif\r
+\r
+#ifndef configMIN\r
+ /* The application writer has not provided their own MAX macro, so define\r
+ the following generic implementation. */\r
+ #define configMIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )\r
+#endif\r
+\r
#if configENABLE_BACKWARD_COMPATIBILITY == 1\r
#define eTaskStateGet eTaskGetState\r
#define portTickType TickType_t\r
#define xCoRoutineHandle CoRoutineHandle_t\r
#define pdTASK_HOOK_CODE TaskHookFunction_t\r
#define portTICK_RATE_MS portTICK_PERIOD_MS\r
+ #define pcTaskGetTaskName pcTaskGetName\r
+ #define pcTimerGetTimerName pcTimerGetName\r
+ #define pcQueueGetQueueName pcQueueGetName\r
+ #define vTaskGetTaskInfo vTaskGetInfo\r
\r
/* Backward compatibility within the scheduler code only - these definitions\r
are not really required but are included for completeness. */\r
#define xList List_t\r
#endif /* configENABLE_BACKWARD_COMPATIBILITY */\r
\r
+#if( configUSE_ALTERNATIVE_API != 0 )\r
+ #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0\r
+#endif\r
+\r
/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even\r
if floating point hardware is otherwise supported by the FreeRTOS port in use.\r
This constant is not supported by all FreeRTOS ports that include floating\r
UBaseType_t uxDummy5;\r
void *pxDummy6;\r
uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ];\r
- #if ( portSTACK_GROWTH > 0 )\r
+ #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )\r
void *pxDummy8;\r
#endif\r
#if ( portCRITICAL_NESTING_IN_TCB == 1 )\r
void *pxDummy14;\r
#endif\r
#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )\r
- void pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];\r
+ void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];\r
#endif\r
#if ( configGENERATE_RUN_TIME_STATS == 1 )\r
uint32_t ulDummy16;\r
uint32_t ulDummy18;\r
uint8_t ucDummy19;\r
#endif\r
- #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\r
+ #if( ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) || ( portUSING_MPU_WRAPPERS == 1 ) )\r
uint8_t uxDummy20;\r
#endif\r
\r
+ #if( INCLUDE_xTaskAbortDelay == 1 )\r
+ uint8_t ucDummy21;\r
+ #endif\r
+\r
} StaticTask_t;\r
\r
/*\r
} u;\r
\r
StaticList_t xDummy3[ 2 ];\r
- UBaseType_t uxDummy4[ 5 ];\r
+ UBaseType_t uxDummy4[ 3 ];\r
+ uint8_t ucDummy5[ 2 ];\r
+\r
+ #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\r
+ uint8_t ucDummy6;\r
+ #endif\r
\r
#if ( configUSE_QUEUE_SETS == 1 )\r
void *pvDummy7;\r
#endif\r
\r
#if ( configUSE_TRACE_FACILITY == 1 )\r
- UBaseType_t uxDummy5;\r
- uint8_t ucDummy6;\r
- #endif\r
-\r
- #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\r
- uint8_t ucDummy7;\r
+ UBaseType_t uxDummy8;\r
+ uint8_t ucDummy9;\r
#endif\r
\r
} StaticQueue_t;\r
UBaseType_t uxDummy3;\r
#endif\r
\r
- #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
- uint8_t ucStaticallyAllocated;\r
+ #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\r
+ uint8_t ucDummy4;\r
#endif\r
\r
} StaticEventGroup_t;\r
UBaseType_t uxDummy6;\r
#endif\r
\r
- #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
- uint8_t ucStaticallyAllocated;\r
+ #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\r
+ uint8_t ucDummy7;\r
#endif\r
\r
} StaticTimer_t;\r
\r
+/*\r
+* In line with software engineering best practice, especially when supplying a\r
+* library that is likely to change in future versions, FreeRTOS implements a\r
+* strict data hiding policy. This means the stream buffer structure used\r
+* internally by FreeRTOS is not accessible to application code. However, if\r
+* the application writer wants to statically allocate the memory required to\r
+* create a stream buffer then the size of the stream buffer object needs to be\r
+* know. The StaticStreamBuffer_t structure below is provided for this purpose.\r
+* Its size and alignment requirements are guaranteed to match those of the\r
+* genuine structure, no matter which architecture is being used, and no matter\r
+* how the values in FreeRTOSConfig.h are set. Its contents are somewhat\r
+* obfuscated in the hope users will recognise that it would be unwise to make\r
+* direct use of the structure members.\r
+*/\r
+typedef struct xSTATIC_STREAM_BUFFER\r
+{\r
+ size_t uxDummy1[ 4 ];\r
+ void * pvDummy2[ 3 ];\r
+ uint8_t ucDummy3;\r
+ #if ( configUSE_TRACE_FACILITY == 1 )\r
+ UBaseType_t uxDummy4;\r
+ #endif\r
+} StaticStreamBuffer_t;\r
+\r
+/* Message buffers are built on stream buffers. */\r
+typedef StaticStreamBuffer_t StaticMessageBuffer_t;\r
+\r
#ifdef __cplusplus\r
}\r
#endif\r