text: /*
   * FreeRTOS Kernel V10.3.0
   * 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!
   */
  
  #ifndef MPU_WRAPPERS_H
  #define MPU_WRAPPERS_H
  
  /* This file redefines API functions to be called through a wrapper macro, but
  only for ports that are using the MPU. */
  #ifdef portUSING_MPU_WRAPPERS
  
      /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
      included from queue.c or task.c to prevent it from having an effect within
      those files. */
      #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
  
          /*
           * Map standard (non MPU) API functions to equivalents that start
           * "MPU_".  This will cause the application code to call the MPU_
           * version, which wraps the non-MPU version with privilege promoting
           * then demoting code, so the kernel code always runs will full
           * privileges.
           */
  
          /* Map standard tasks.h API functions to the MPU equivalents. */
          #define xTaskCreate                             MPU_xTaskCreate
          #define xTaskCreateStatic                       MPU_xTaskCreateStatic
          #define xTaskCreateRestricted                   MPU_xTaskCreateRestricted
          #define vTaskAllocateMPURegions                 MPU_vTaskAllocateMPURegions
          #define vTaskDelete                             MPU_vTaskDelete
          #define vTaskDelay                              MPU_vTaskDelay
          #define vTaskDelayUntil                         MPU_vTaskDelayUntil
          #define xTaskAbortDelay                         MPU_xTaskAbortDelay
          #define uxTaskPriorityGet                       MPU_uxTaskPriorityGet
          #define eTaskGetState                           MPU_eTaskGetState
          #define vTaskGetInfo                            MPU_vTaskGetInfo
          #define vTaskPrioritySet                        MPU_vTaskPrioritySet
          #define vTaskSuspend                            MPU_vTaskSuspend
          #define vTaskResume                             MPU_vTaskResume
          #define vTaskSuspendAll                         MPU_vTaskSuspendAll
          #define xTaskResumeAll                          MPU_xTaskResumeAll
          #define xTaskGetTickCount                       MPU_xTaskGetTickCount
          #define uxTaskGetNumberOfTasks                  MPU_uxTaskGetNumberOfTasks
          #define pcTaskGetName                           MPU_pcTaskGetName
          #define xTaskGetHandle                          MPU_xTaskGetHandle
          #define uxTaskGetStackHighWaterMark             MPU_uxTaskGetStackHighWaterMark
          #define vTaskSetApplicationTaskTag              MPU_vTaskSetApplicationTaskTag
          #define xTaskGetApplicationTaskTag              MPU_xTaskGetApplicationTaskTag
          #define vTaskSetThreadLocalStoragePointer       MPU_vTaskSetThreadLocalStoragePointer
          #define pvTaskGetThreadLocalStoragePointer      MPU_pvTaskGetThreadLocalStoragePointer
          #define xTaskCallApplicationTaskHook            MPU_xTaskCallApplicationTaskHook
          #define xTaskGetIdleTaskHandle                  MPU_xTaskGetIdleTaskHandle
          #define uxTaskGetSystemState                    MPU_uxTaskGetSystemState
          #define vTaskList                               MPU_vTaskList
          #define vTaskGetRunTimeStats                    MPU_vTaskGetRunTimeStats
          #define ulTaskGetIdleRunTimeCounter                MPU_ulTaskGetIdleRunTimeCounter
          #define xTaskGenericNotify                      MPU_xTaskGenericNotify
          #define xTaskNotifyWait                         MPU_xTaskNotifyWait
          #define ulTaskNotifyTake                        MPU_ulTaskNotifyTake
          #define xTaskNotifyStateClear                   MPU_xTaskNotifyStateClear
          #define ulTaskNotifyValueClear                    MPU_ulTaskNotifyValueClear
          #define xTaskCatchUpTicks                        MPU_xTaskCatchUpTicks
  
          #define xTaskGetCurrentTaskHandle               MPU_xTaskGetCurrentTaskHandle
          #define vTaskSetTimeOutState                    MPU_vTaskSetTimeOutState
          #define xTaskCheckForTimeOut                    MPU_xTaskCheckForTimeOut
          #define xTaskGetSchedulerState                  MPU_xTaskGetSchedulerState
  
          /* Map standard queue.h API functions to the MPU equivalents. */
          #define xQueueGenericSend                       MPU_xQueueGenericSend
          #define xQueueReceive                           MPU_xQueueReceive
          #define xQueuePeek                              MPU_xQueuePeek
          #define xQueueSemaphoreTake                     MPU_xQueueSemaphoreTake
          #define uxQueueMessagesWaiting                  MPU_uxQueueMessagesWaiting
          #define uxQueueSpacesAvailable                  MPU_uxQueueSpacesAvailable
          #define vQueueDelete                            MPU_vQueueDelete
          #define xQueueCreateMutex                       MPU_xQueueCreateMutex
          #define xQueueCreateMutexStatic                 MPU_xQueueCreateMutexStatic
          #define xQueueCreateCountingSemaphore           MPU_xQueueCreateCountingSemaphore
          #define xQueueCreateCountingSemaphoreStatic     MPU_xQueueCreateCountingSemaphoreStatic
          #define xQueueGetMutexHolder                    MPU_xQueueGetMutexHolder
          #define xQueueTakeMutexRecursive                MPU_xQueueTakeMutexRecursive
          #define xQueueGiveMutexRecursive                MPU_xQueueGiveMutexRecursive
          #define xQueueGenericCreate                     MPU_xQueueGenericCreate
          #define xQueueGenericCreateStatic               MPU_xQueueGenericCreateStatic
          #define xQueueCreateSet                         MPU_xQueueCreateSet
          #define xQueueAddToSet                          MPU_xQueueAddToSet
          #define xQueueRemoveFromSet                     MPU_xQueueRemoveFromSet
          #define xQueueSelectFromSet                     MPU_xQueueSelectFromSet
          #define xQueueGenericReset                      MPU_xQueueGenericReset
  
          #if( configQUEUE_REGISTRY_SIZE > 0 )
              #define vQueueAddToRegistry                 MPU_vQueueAddToRegistry
              #define vQueueUnregisterQueue               MPU_vQueueUnregisterQueue
              #define pcQueueGetName                      MPU_pcQueueGetName
          #endif
  
          /* Map standard timer.h API functions to the MPU equivalents. */
          #define xTimerCreate                            MPU_xTimerCreate
          #define xTimerCreateStatic                      MPU_xTimerCreateStatic
          #define pvTimerGetTimerID                       MPU_pvTimerGetTimerID
          #define vTimerSetTimerID                        MPU_vTimerSetTimerID
          #define xTimerIsTimerActive                     MPU_xTimerIsTimerActive
          #define xTimerGetTimerDaemonTaskHandle          MPU_xTimerGetTimerDaemonTaskHandle
          #define xTimerPendFunctionCall                  MPU_xTimerPendFunctionCall
          #define pcTimerGetName                          MPU_pcTimerGetName
          #define vTimerSetReloadMode                     MPU_vTimerSetReloadMode
          #define uxTimerGetReloadMode                    MPU_uxTimerGetReloadMode
          #define xTimerGetPeriod                         MPU_xTimerGetPeriod
          #define xTimerGetExpiryTime                     MPU_xTimerGetExpiryTime
          #define xTimerGenericCommand                    MPU_xTimerGenericCommand
  
          /* Map standard event_group.h API functions to the MPU equivalents. */
          #define xEventGroupCreate                       MPU_xEventGroupCreate
          #define xEventGroupCreateStatic                 MPU_xEventGroupCreateStatic
          #define xEventGroupWaitBits                     MPU_xEventGroupWaitBits
          #define xEventGroupClearBits                    MPU_xEventGroupClearBits
          #define xEventGroupSetBits                      MPU_xEventGroupSetBits
          #define xEventGroupSync                         MPU_xEventGroupSync
          #define vEventGroupDelete                       MPU_vEventGroupDelete
  
          /* Map standard message/stream_buffer.h API functions to the MPU
          equivalents. */
          #define xStreamBufferSend                       MPU_xStreamBufferSend
          #define xStreamBufferReceive                    MPU_xStreamBufferReceive
          #define xStreamBufferNextMessageLengthBytes     MPU_xStreamBufferNextMessageLengthBytes
          #define vStreamBufferDelete                     MPU_vStreamBufferDelete
          #define xStreamBufferIsFull                     MPU_xStreamBufferIsFull
          #define xStreamBufferIsEmpty                    MPU_xStreamBufferIsEmpty
          #define xStreamBufferReset                      MPU_xStreamBufferReset
          #define xStreamBufferSpacesAvailable            MPU_xStreamBufferSpacesAvailable
          #define xStreamBufferBytesAvailable             MPU_xStreamBufferBytesAvailable
          #define xStreamBufferSetTriggerLevel            MPU_xStreamBufferSetTriggerLevel
          #define xStreamBufferGenericCreate              MPU_xStreamBufferGenericCreate
          #define xStreamBufferGenericCreateStatic        MPU_xStreamBufferGenericCreateStatic
  
  
          /* Remove the privileged function macro, but keep the PRIVILEGED_DATA
          macro so applications can place data in privileged access sections
          (useful when using statically allocated objects). */
          #define PRIVILEGED_FUNCTION
          #define PRIVILEGED_DATA __attribute__((section("privileged_data")))
          #define FREERTOS_SYSTEM_CALL
  
      #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
  
          /* Ensure API functions go in the privileged execution section. */
          #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
          #define PRIVILEGED_DATA __attribute__((section("privileged_data")))
          #define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls")))
  
      #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
  
  #else /* portUSING_MPU_WRAPPERS */
  
  #if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)    // Mega with 2560
      #define PRIVILEGED_FUNCTION     __attribute__ ((hot))
      #define PRIVILEGED_DATA
      #define FREERTOS_SYSTEM_CALL    __attribute__ ((hot))
      #define portUSING_MPU_WRAPPERS 0
  #elif defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega664P__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284PA__) // Goldilocks with 1284p
      #define PRIVILEGED_FUNCTION     __attribute__ ((hot))
      #define PRIVILEGED_DATA
      #define FREERTOS_SYSTEM_CALL    __attribute__ ((hot))
      #define portUSING_MPU_WRAPPERS 0
  #else                                                            // Uno with 328p or Leonardo with 32u4
      #define PRIVILEGED_FUNCTION     __attribute__ ((hot))
      #define PRIVILEGED_DATA
      #define FREERTOS_SYSTEM_CALL    __attribute__ ((hot))
      #define portUSING_MPU_WRAPPERS 0
  #endif
  
  #endif /* portUSING_MPU_WRAPPERS */
  
  
  #endif /* MPU_WRAPPERS_H */
  
  