]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/include/mpu_wrappers.h
Added uxTimerGetReloadMode() API function.
[freertos] / FreeRTOS / Source / include / mpu_wrappers.h
index 4a56b37d96f280ad143b9a6505a6c469231d777a..b131042adbb99a8e0117244e3d72a5aa9094a5a4 100644 (file)
@@ -1,71 +1,29 @@
 /*\r
-    FreeRTOS V9.0.0rc1 - Copyright (C) 2016 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.2.1\r
+ * Copyright (C) 2019 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 MPU_WRAPPERS_H\r
 #define MPU_WRAPPERS_H\r
@@ -79,88 +37,141 @@ only for ports that are using the MPU. */
        those files. */\r
        #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
 \r
-               #define xTaskGenericCreate                              MPU_xTaskGenericCreate\r
-               #define vTaskAllocateMPURegions                 MPU_vTaskAllocateMPURegions\r
-               #define vTaskDelete                                             MPU_vTaskDelete\r
-               #define vTaskDelayUntil                                 MPU_vTaskDelayUntil\r
-               #define vTaskDelay                                              MPU_vTaskDelay\r
-               #define uxTaskPriorityGet                               MPU_uxTaskPriorityGet\r
-               #define vTaskPrioritySet                                MPU_vTaskPrioritySet\r
-               #define eTaskGetState                                   MPU_eTaskGetState\r
-               #define vTaskSuspend                                    MPU_vTaskSuspend\r
-               #define vTaskResume                                             MPU_vTaskResume\r
-               #define vTaskSuspendAll                                 MPU_vTaskSuspendAll\r
-               #define xTaskResumeAll                                  MPU_xTaskResumeAll\r
-               #define xTaskGetTickCount                               MPU_xTaskGetTickCount\r
-               #define uxTaskGetNumberOfTasks                  MPU_uxTaskGetNumberOfTasks\r
-               #define vTaskList                                               MPU_vTaskList\r
-               #define vTaskGetRunTimeStats                    MPU_vTaskGetRunTimeStats\r
-               #define vTaskSetApplicationTaskTag              MPU_vTaskSetApplicationTaskTag\r
-               #define xTaskGetApplicationTaskTag              MPU_xTaskGetApplicationTaskTag\r
-               #define xTaskCallApplicationTaskHook    MPU_xTaskCallApplicationTaskHook\r
-               #define uxTaskGetStackHighWaterMark             MPU_uxTaskGetStackHighWaterMark\r
-               #define xTaskGetCurrentTaskHandle               MPU_xTaskGetCurrentTaskHandle\r
-               #define xTaskGetSchedulerState                  MPU_xTaskGetSchedulerState\r
-               #define xTaskGetIdleTaskHandle                  MPU_xTaskGetIdleTaskHandle\r
-               #define uxTaskGetSystemState                    MPU_uxTaskGetSystemState\r
-               #define xTaskGenericNotify                              MPU_xTaskGenericNotify\r
-               #define xTaskNotifyWait                                 MPU_xTaskNotifyWait\r
-               #define ulTaskNotifyTake                                MPU_ulTaskNotifyTake\r
-\r
-               #define xQueueGenericCreate                             MPU_xQueueGenericCreate\r
-               #define xQueueCreateMutex                               MPU_xQueueCreateMutex\r
-               #define xQueueGiveMutexRecursive                MPU_xQueueGiveMutexRecursive\r
-               #define xQueueTakeMutexRecursive                MPU_xQueueTakeMutexRecursive\r
-               #define xQueueCreateCountingSemaphore   MPU_xQueueCreateCountingSemaphore\r
-               #define xQueueGenericSend                               MPU_xQueueGenericSend\r
-               #define xQueueGenericReceive                    MPU_xQueueGenericReceive\r
-               #define uxQueueMessagesWaiting                  MPU_uxQueueMessagesWaiting\r
-               #define vQueueDelete                                    MPU_vQueueDelete\r
-               #define xQueueGenericReset                              MPU_xQueueGenericReset\r
-               #define xQueueCreateSet                                 MPU_xQueueCreateSet\r
-               #define xQueueSelectFromSet                             MPU_xQueueSelectFromSet\r
-               #define xQueueAddToSet                                  MPU_xQueueAddToSet\r
-               #define xQueueRemoveFromSet                             MPU_xQueueRemoveFromSet\r
-               #define xQueueGetMutexHolder                    MPU_xQueueGetMutexHolder\r
-\r
-               #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\r
-                       #define pvPortMalloc                                    MPU_pvPortMalloc\r
-                       #define vPortFree                                               MPU_vPortFree\r
-               #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\r
-\r
-               #define xPortGetFreeHeapSize                    MPU_xPortGetFreeHeapSize\r
-               #define vPortInitialiseBlocks                   MPU_vPortInitialiseBlocks\r
-               #define xPortGetMinimumEverFreeHeapSize MPU_xPortGetMinimumEverFreeHeapSize\r
-\r
-               #if configQUEUE_REGISTRY_SIZE > 0\r
-                       #define vQueueAddToRegistry                             MPU_vQueueAddToRegistry\r
-                       #define vQueueUnregisterQueue                   MPU_vQueueUnregisterQueue\r
+               /*\r
+                * Map standard (non MPU) API functions to equivalents that start\r
+                * "MPU_".  This will cause the application code to call the MPU_\r
+                * version, which wraps the non-MPU version with privilege promoting\r
+                * then demoting code, so the kernel code always runs will full\r
+                * privileges.\r
+                */\r
+\r
+               /* Map standard tasks.h API functions to the MPU equivalents. */\r
+               #define xTaskCreate                                                             MPU_xTaskCreate\r
+               #define xTaskCreateStatic                                               MPU_xTaskCreateStatic\r
+               #define xTaskCreateRestricted                                   MPU_xTaskCreateRestricted\r
+               #define vTaskAllocateMPURegions                                 MPU_vTaskAllocateMPURegions\r
+               #define vTaskDelete                                                             MPU_vTaskDelete\r
+               #define vTaskDelay                                                              MPU_vTaskDelay\r
+               #define vTaskDelayUntil                                                 MPU_vTaskDelayUntil\r
+               #define xTaskAbortDelay                                                 MPU_xTaskAbortDelay\r
+               #define uxTaskPriorityGet                                               MPU_uxTaskPriorityGet\r
+               #define eTaskGetState                                                   MPU_eTaskGetState\r
+               #define vTaskGetInfo                                                    MPU_vTaskGetInfo\r
+               #define vTaskPrioritySet                                                MPU_vTaskPrioritySet\r
+               #define vTaskSuspend                                                    MPU_vTaskSuspend\r
+               #define vTaskResume                                                             MPU_vTaskResume\r
+               #define vTaskSuspendAll                                                 MPU_vTaskSuspendAll\r
+               #define xTaskResumeAll                                                  MPU_xTaskResumeAll\r
+               #define xTaskGetTickCount                                               MPU_xTaskGetTickCount\r
+               #define uxTaskGetNumberOfTasks                                  MPU_uxTaskGetNumberOfTasks\r
+               #define pcTaskGetName                                                   MPU_pcTaskGetName\r
+               #define xTaskGetHandle                                                  MPU_xTaskGetHandle\r
+               #define uxTaskGetStackHighWaterMark                             MPU_uxTaskGetStackHighWaterMark\r
+               #define uxTaskGetStackHighWaterMark2                    MPU_uxTaskGetStackHighWaterMark2\r
+               #define vTaskSetApplicationTaskTag                              MPU_vTaskSetApplicationTaskTag\r
+               #define xTaskGetApplicationTaskTag                              MPU_xTaskGetApplicationTaskTag\r
+               #define vTaskSetThreadLocalStoragePointer               MPU_vTaskSetThreadLocalStoragePointer\r
+               #define pvTaskGetThreadLocalStoragePointer              MPU_pvTaskGetThreadLocalStoragePointer\r
+               #define xTaskCallApplicationTaskHook                    MPU_xTaskCallApplicationTaskHook\r
+               #define xTaskGetIdleTaskHandle                                  MPU_xTaskGetIdleTaskHandle\r
+               #define uxTaskGetSystemState                                    MPU_uxTaskGetSystemState\r
+               #define vTaskList                                                               MPU_vTaskList\r
+               #define vTaskGetRunTimeStats                                    MPU_vTaskGetRunTimeStats\r
+               #define ulTaskGetIdleRunTimeCounter                             MPU_ulTaskGetIdleRunTimeCounter\r
+               #define xTaskGenericNotify                                              MPU_xTaskGenericNotify\r
+               #define xTaskNotifyWait                                                 MPU_xTaskNotifyWait\r
+               #define ulTaskNotifyTake                                                MPU_ulTaskNotifyTake\r
+               #define xTaskNotifyStateClear                                   MPU_xTaskNotifyStateClear\r
+               #define ulTaskNotifyValueClear                                  MPU_ulTaskNotifyValueClear\r
+               #define xTaskCatchUpTicks                                               MPU_xTaskCatchUpTicks\r
+\r
+               #define xTaskGetCurrentTaskHandle                               MPU_xTaskGetCurrentTaskHandle\r
+               #define vTaskSetTimeOutState                                    MPU_vTaskSetTimeOutState\r
+               #define xTaskCheckForTimeOut                                    MPU_xTaskCheckForTimeOut\r
+               #define xTaskGetSchedulerState                                  MPU_xTaskGetSchedulerState\r
+\r
+               /* Map standard queue.h API functions to the MPU equivalents. */\r
+               #define xQueueGenericSend                                               MPU_xQueueGenericSend\r
+               #define xQueueReceive                                                   MPU_xQueueReceive\r
+               #define xQueuePeek                                                              MPU_xQueuePeek\r
+               #define xQueueSemaphoreTake                                             MPU_xQueueSemaphoreTake\r
+               #define uxQueueMessagesWaiting                                  MPU_uxQueueMessagesWaiting\r
+               #define uxQueueSpacesAvailable                                  MPU_uxQueueSpacesAvailable\r
+               #define vQueueDelete                                                    MPU_vQueueDelete\r
+               #define xQueueCreateMutex                                               MPU_xQueueCreateMutex\r
+               #define xQueueCreateMutexStatic                                 MPU_xQueueCreateMutexStatic\r
+               #define xQueueCreateCountingSemaphore                   MPU_xQueueCreateCountingSemaphore\r
+               #define xQueueCreateCountingSemaphoreStatic             MPU_xQueueCreateCountingSemaphoreStatic\r
+               #define xQueueGetMutexHolder                                    MPU_xQueueGetMutexHolder\r
+               #define xQueueTakeMutexRecursive                                MPU_xQueueTakeMutexRecursive\r
+               #define xQueueGiveMutexRecursive                                MPU_xQueueGiveMutexRecursive\r
+               #define xQueueGenericCreate                                             MPU_xQueueGenericCreate\r
+               #define xQueueGenericCreateStatic                               MPU_xQueueGenericCreateStatic\r
+               #define xQueueCreateSet                                                 MPU_xQueueCreateSet\r
+               #define xQueueAddToSet                                                  MPU_xQueueAddToSet\r
+               #define xQueueRemoveFromSet                                             MPU_xQueueRemoveFromSet\r
+               #define xQueueSelectFromSet                                             MPU_xQueueSelectFromSet\r
+               #define xQueueGenericReset                                              MPU_xQueueGenericReset\r
+\r
+               #if( configQUEUE_REGISTRY_SIZE > 0 )\r
+                       #define vQueueAddToRegistry                                             MPU_vQueueAddToRegistry\r
+                       #define vQueueUnregisterQueue                                   MPU_vQueueUnregisterQueue\r
+                       #define pcQueueGetName                                                  MPU_pcQueueGetName\r
                #endif\r
 \r
-               #define xTimerCreate                                    MPU_xTimerCreate\r
-               #define pvTimerGetTimerID                               MPU_pvTimerGetTimerID\r
-               #define vTimerSetTimerID                                MPU_vTimerSetTimerID\r
-               #define xTimerIsTimerActive                             MPU_xTimerIsTimerActive\r
-               #define xTimerGetTimerDaemonTaskHandle  MPU_xTimerGetTimerDaemonTaskHandle\r
-               #define xTimerPendFunctionCall                  MPU_xTimerPendFunctionCall\r
-               #define pcTimerGetName                                  MPU_pcTimerGetName\r
-               #define xTimerGenericCommand                    MPU_xTimerGenericCommand\r
-\r
-               #define xEventGroupCreate                               MPU_xEventGroupCreate\r
-               #define xEventGroupWaitBits                             MPU_xEventGroupWaitBits\r
-               #define xEventGroupClearBits                    MPU_xEventGroupClearBits\r
-               #define xEventGroupSetBits                              MPU_xEventGroupSetBits\r
-               #define xEventGroupSync                                 MPU_xEventGroupSync\r
-               #define vEventGroupDelete                               MPU_vEventGroupDelete\r
-\r
-               /* Remove the privileged function macro. */\r
+               /* Map standard timer.h API functions to the MPU equivalents. */\r
+               #define xTimerCreate                                                    MPU_xTimerCreate\r
+               #define xTimerCreateStatic                                              MPU_xTimerCreateStatic\r
+               #define pvTimerGetTimerID                                               MPU_pvTimerGetTimerID\r
+               #define vTimerSetTimerID                                                MPU_vTimerSetTimerID\r
+               #define xTimerIsTimerActive                                             MPU_xTimerIsTimerActive\r
+               #define xTimerGetTimerDaemonTaskHandle                  MPU_xTimerGetTimerDaemonTaskHandle\r
+               #define xTimerPendFunctionCall                                  MPU_xTimerPendFunctionCall\r
+               #define pcTimerGetName                                                  MPU_pcTimerGetName\r
+               #define vTimerSetReloadMode                                             MPU_vTimerSetReloadMode\r
+               #define uxTimerGetReloadMode                                    MPU_uxTimerGetReloadMode\r
+               #define xTimerGetPeriod                                                 MPU_xTimerGetPeriod\r
+               #define xTimerGetExpiryTime                                             MPU_xTimerGetExpiryTime\r
+               #define xTimerGenericCommand                                    MPU_xTimerGenericCommand\r
+\r
+               /* Map standard event_group.h API functions to the MPU equivalents. */\r
+               #define xEventGroupCreate                                               MPU_xEventGroupCreate\r
+               #define xEventGroupCreateStatic                                 MPU_xEventGroupCreateStatic\r
+               #define xEventGroupWaitBits                                             MPU_xEventGroupWaitBits\r
+               #define xEventGroupClearBits                                    MPU_xEventGroupClearBits\r
+               #define xEventGroupSetBits                                              MPU_xEventGroupSetBits\r
+               #define xEventGroupSync                                                 MPU_xEventGroupSync\r
+               #define vEventGroupDelete                                               MPU_vEventGroupDelete\r
+\r
+               /* Map standard message/stream_buffer.h API functions to the MPU\r
+               equivalents. */\r
+               #define xStreamBufferSend                                               MPU_xStreamBufferSend\r
+               #define xStreamBufferReceive                                    MPU_xStreamBufferReceive\r
+               #define xStreamBufferNextMessageLengthBytes             MPU_xStreamBufferNextMessageLengthBytes\r
+               #define vStreamBufferDelete                                             MPU_vStreamBufferDelete\r
+               #define xStreamBufferIsFull                                             MPU_xStreamBufferIsFull\r
+               #define xStreamBufferIsEmpty                                    MPU_xStreamBufferIsEmpty\r
+               #define xStreamBufferReset                                              MPU_xStreamBufferReset\r
+               #define xStreamBufferSpacesAvailable                    MPU_xStreamBufferSpacesAvailable\r
+               #define xStreamBufferBytesAvailable                             MPU_xStreamBufferBytesAvailable\r
+               #define xStreamBufferSetTriggerLevel                    MPU_xStreamBufferSetTriggerLevel\r
+               #define xStreamBufferGenericCreate                              MPU_xStreamBufferGenericCreate\r
+               #define xStreamBufferGenericCreateStatic                MPU_xStreamBufferGenericCreateStatic\r
+\r
+\r
+               /* Remove the privileged function macro, but keep the PRIVILEGED_DATA\r
+               macro so applications can place data in privileged access sections\r
+               (useful when using statically allocated objects). */\r
                #define PRIVILEGED_FUNCTION\r
+               #define PRIVILEGED_DATA __attribute__((section("privileged_data")))\r
+               #define FREERTOS_SYSTEM_CALL\r
 \r
        #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */\r
 \r
                /* Ensure API functions go in the privileged execution section. */\r
                #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))\r
                #define PRIVILEGED_DATA __attribute__((section("privileged_data")))\r
+               #define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls")))\r
 \r
        #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */\r
 \r
@@ -168,6 +179,7 @@ only for ports that are using the MPU. */
 \r
        #define PRIVILEGED_FUNCTION\r
        #define PRIVILEGED_DATA\r
+       #define FREERTOS_SYSTEM_CALL\r
        #define portUSING_MPU_WRAPPERS 0\r
 \r
 #endif /* portUSING_MPU_WRAPPERS */\r