]> begriffs open source - freertos/blob - include/mpu_prototypes.h
Fix the defect that Heap_1.c may waste first portBYTE_ALIGNMENT bytes of ucHeap[...
[freertos] / include / mpu_prototypes.h
1 /*\r
2  * FreeRTOS Kernel <DEVELOPMENT BRANCH>\r
3  * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * SPDX-License-Identifier: MIT\r
6  *\r
7  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
8  * this software and associated documentation files (the "Software"), to deal in\r
9  * the Software without restriction, including without limitation the rights to\r
10  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
11  * the Software, and to permit persons to whom the Software is furnished to do so,\r
12  * subject to the following conditions:\r
13  *\r
14  * The above copyright notice and this permission notice shall be included in all\r
15  * copies or substantial portions of the Software.\r
16  *\r
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
19  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
20  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
21  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
23  *\r
24  * https://www.FreeRTOS.org\r
25  * https://github.com/FreeRTOS\r
26  *\r
27  */\r
28 \r
29 /*\r
30  * When the MPU is used the standard (non MPU) API functions are mapped to\r
31  * equivalents that start "MPU_", the prototypes for which are defined in this\r
32  * header files.  This will cause the application code to call the MPU_ version\r
33  * which wraps the non-MPU version with privilege promoting then demoting code,\r
34  * so the kernel code always runs will full privileges.\r
35  */\r
36 \r
37 \r
38 #ifndef MPU_PROTOTYPES_H\r
39 #define MPU_PROTOTYPES_H\r
40 \r
41 /* MPU versions of tasks.h API functions. */\r
42 BaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode,\r
43                             const char * const pcName,\r
44                             const uint16_t usStackDepth,\r
45                             void * const pvParameters,\r
46                             UBaseType_t uxPriority,\r
47                             TaskHandle_t * const pxCreatedTask ) FREERTOS_SYSTEM_CALL;\r
48 TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode,\r
49                                     const char * const pcName,\r
50                                     const uint32_t ulStackDepth,\r
51                                     void * const pvParameters,\r
52                                     UBaseType_t uxPriority,\r
53                                     StackType_t * const puxStackBuffer,\r
54                                     StaticTask_t * const pxTaskBuffer ) FREERTOS_SYSTEM_CALL;\r
55 void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) FREERTOS_SYSTEM_CALL;\r
56 void MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL;\r
57 BaseType_t MPU_xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,\r
58                                 const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;\r
59 BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
60 UBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
61 eTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
62 void MPU_vTaskGetInfo( TaskHandle_t xTask,\r
63                        TaskStatus_t * pxTaskStatus,\r
64                        BaseType_t xGetFreeStackSpace,\r
65                        eTaskState eState ) FREERTOS_SYSTEM_CALL;\r
66 void MPU_vTaskPrioritySet( TaskHandle_t xTask,\r
67                            UBaseType_t uxNewPriority ) FREERTOS_SYSTEM_CALL;\r
68 void MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ) FREERTOS_SYSTEM_CALL;\r
69 void MPU_vTaskResume( TaskHandle_t xTaskToResume ) FREERTOS_SYSTEM_CALL;\r
70 void MPU_vTaskStartScheduler( void ) FREERTOS_SYSTEM_CALL;\r
71 void MPU_vTaskSuspendAll( void ) FREERTOS_SYSTEM_CALL;\r
72 BaseType_t MPU_xTaskResumeAll( void ) FREERTOS_SYSTEM_CALL;\r
73 TickType_t MPU_xTaskGetTickCount( void ) FREERTOS_SYSTEM_CALL;\r
74 UBaseType_t MPU_uxTaskGetNumberOfTasks( void ) FREERTOS_SYSTEM_CALL;\r
75 char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) FREERTOS_SYSTEM_CALL;\r
76 TaskHandle_t MPU_xTaskGetHandle( const char * pcNameToQuery ) FREERTOS_SYSTEM_CALL;\r
77 UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
78 configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
79 void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask,\r
80                                      TaskHookFunction_t pxHookFunction ) FREERTOS_SYSTEM_CALL;\r
81 TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
82 void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,\r
83                                             BaseType_t xIndex,\r
84                                             void * pvValue ) FREERTOS_SYSTEM_CALL;\r
85 void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery,\r
86                                                BaseType_t xIndex ) FREERTOS_SYSTEM_CALL;\r
87 BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask,\r
88                                              void * pvParameter ) FREERTOS_SYSTEM_CALL;\r
89 TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
90 UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,\r
91                                       const UBaseType_t uxArraySize,\r
92                                       configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL;\r
93 configRUN_TIME_COUNTER_TYPE MPU_ulTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;\r
94 configRUN_TIME_COUNTER_TYPE MPU_ulTaskGetIdleRunTimePercent( void ) FREERTOS_SYSTEM_CALL;\r
95 void MPU_vTaskList( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
96 void MPU_vTaskGetRunTimeStats( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
97 BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify,\r
98                                    UBaseType_t uxIndexToNotify,\r
99                                    uint32_t ulValue,\r
100                                    eNotifyAction eAction,\r
101                                    uint32_t * pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL;\r
102 BaseType_t MPU_xTaskGenericNotifyWait( UBaseType_t uxIndexToWaitOn,\r
103                                        uint32_t ulBitsToClearOnEntry,\r
104                                        uint32_t ulBitsToClearOnExit,\r
105                                        uint32_t * pulNotificationValue,\r
106                                        TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
107 uint32_t MPU_ulTaskGenericNotifyTake( UBaseType_t uxIndexToWaitOn,\r
108                                       BaseType_t xClearCountOnExit,\r
109                                       TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
110 BaseType_t MPU_xTaskGenericNotifyStateClear( TaskHandle_t xTask,\r
111                                              UBaseType_t uxIndexToClear ) FREERTOS_SYSTEM_CALL;\r
112 uint32_t MPU_ulTaskGenericNotifyValueClear( TaskHandle_t xTask,\r
113                                             UBaseType_t uxIndexToClear,\r
114                                             uint32_t ulBitsToClear ) FREERTOS_SYSTEM_CALL;\r
115 BaseType_t MPU_xTaskIncrementTick( void ) FREERTOS_SYSTEM_CALL;\r
116 TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
117 void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CALL;\r
118 BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,\r
119                                      TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL;\r
120 void MPU_vTaskMissedYield( void ) FREERTOS_SYSTEM_CALL;\r
121 BaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL;\r
122 BaseType_t MPU_xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) FREERTOS_SYSTEM_CALL;\r
123 \r
124 /* MPU versions of queue.h API functions. */\r
125 BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue,\r
126                                   const void * const pvItemToQueue,\r
127                                   TickType_t xTicksToWait,\r
128                                   const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL;\r
129 BaseType_t MPU_xQueueReceive( QueueHandle_t xQueue,\r
130                               void * const pvBuffer,\r
131                               TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
132 BaseType_t MPU_xQueuePeek( QueueHandle_t xQueue,\r
133                            void * const pvBuffer,\r
134                            TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
135 BaseType_t MPU_xQueueSemaphoreTake( QueueHandle_t xQueue,\r
136                                     TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
137 UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
138 UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
139 void MPU_vQueueDelete( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
140 QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
141 QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType,\r
142                                            StaticQueue_t * pxStaticQueue ) FREERTOS_SYSTEM_CALL;\r
143 QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,\r
144                                                  const UBaseType_t uxInitialCount ) FREERTOS_SYSTEM_CALL;\r
145 QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,\r
146                                                        const UBaseType_t uxInitialCount,\r
147                                                        StaticQueue_t * pxStaticQueue ) FREERTOS_SYSTEM_CALL;\r
148 TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) FREERTOS_SYSTEM_CALL;\r
149 BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex,\r
150                                          TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
151 BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) FREERTOS_SYSTEM_CALL;\r
152 void MPU_vQueueAddToRegistry( QueueHandle_t xQueue,\r
153                               const char * pcName ) FREERTOS_SYSTEM_CALL;\r
154 void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
155 const char * MPU_pcQueueGetName( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
156 QueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength,\r
157                                        const UBaseType_t uxItemSize,\r
158                                        const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
159 QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength,\r
160                                              const UBaseType_t uxItemSize,\r
161                                              uint8_t * pucQueueStorage,\r
162                                              StaticQueue_t * pxStaticQueue,\r
163                                              const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
164 QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL;\r
165 BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,\r
166                                QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;\r
167 BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,\r
168                                     QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;\r
169 QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet,\r
170                                                 const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
171 BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue,\r
172                                    BaseType_t xNewQueue ) FREERTOS_SYSTEM_CALL;\r
173 void MPU_vQueueSetQueueNumber( QueueHandle_t xQueue,\r
174                                UBaseType_t uxQueueNumber ) FREERTOS_SYSTEM_CALL;\r
175 UBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
176 uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
177 \r
178 /* MPU versions of timers.h API functions. */\r
179 TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName,\r
180                                 const TickType_t xTimerPeriodInTicks,\r
181                                 const UBaseType_t uxAutoReload,\r
182                                 void * const pvTimerID,\r
183                                 TimerCallbackFunction_t pxCallbackFunction ) FREERTOS_SYSTEM_CALL;\r
184 TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName,\r
185                                       const TickType_t xTimerPeriodInTicks,\r
186                                       const UBaseType_t uxAutoReload,\r
187                                       void * const pvTimerID,\r
188                                       TimerCallbackFunction_t pxCallbackFunction,\r
189                                       StaticTimer_t * pxTimerBuffer ) FREERTOS_SYSTEM_CALL;\r
190 void * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
191 void MPU_vTimerSetTimerID( TimerHandle_t xTimer,\r
192                            void * pvNewID ) FREERTOS_SYSTEM_CALL;\r
193 BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
194 TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
195 BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,\r
196                                        void * pvParameter1,\r
197                                        uint32_t ulParameter2,\r
198                                        TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
199 const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
200 void MPU_vTimerSetReloadMode( TimerHandle_t xTimer,\r
201                               const UBaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL;\r
202 UBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
203 TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
204 TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
205 BaseType_t MPU_xTimerCreateTimerTask( void ) FREERTOS_SYSTEM_CALL;\r
206 BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer,\r
207                                      const BaseType_t xCommandID,\r
208                                      const TickType_t xOptionalValue,\r
209                                      BaseType_t * const pxHigherPriorityTaskWoken,\r
210                                      const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
211 \r
212 /* MPU versions of event_group.h API functions. */\r
213 EventGroupHandle_t MPU_xEventGroupCreate( void ) FREERTOS_SYSTEM_CALL;\r
214 EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) FREERTOS_SYSTEM_CALL;\r
215 EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,\r
216                                      const EventBits_t uxBitsToWaitFor,\r
217                                      const BaseType_t xClearOnExit,\r
218                                      const BaseType_t xWaitForAllBits,\r
219                                      TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
220 EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup,\r
221                                       const EventBits_t uxBitsToClear ) FREERTOS_SYSTEM_CALL;\r
222 EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup,\r
223                                     const EventBits_t uxBitsToSet ) FREERTOS_SYSTEM_CALL;\r
224 EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup,\r
225                                  const EventBits_t uxBitsToSet,\r
226                                  const EventBits_t uxBitsToWaitFor,\r
227                                  TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
228 void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) FREERTOS_SYSTEM_CALL;\r
229 UBaseType_t MPU_uxEventGroupGetNumber( void * xEventGroup ) FREERTOS_SYSTEM_CALL;\r
230 \r
231 /* MPU versions of message/stream_buffer.h API functions. */\r
232 size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\r
233                               const void * pvTxData,\r
234                               size_t xDataLengthBytes,\r
235                               TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
236 size_t MPU_xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\r
237                                  void * pvRxData,\r
238                                  size_t xBufferLengthBytes,\r
239                                  TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
240 size_t MPU_xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
241 void MPU_vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
242 BaseType_t MPU_xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
243 BaseType_t MPU_xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
244 BaseType_t MPU_xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
245 size_t MPU_xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
246 size_t MPU_xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
247 BaseType_t MPU_xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,\r
248                                              size_t xTriggerLevel ) FREERTOS_SYSTEM_CALL;\r
249 StreamBufferHandle_t MPU_xStreamBufferGenericCreate( size_t xBufferSizeBytes,\r
250                                                      size_t xTriggerLevelBytes,\r
251                                                      BaseType_t xIsMessageBuffer ) FREERTOS_SYSTEM_CALL;\r
252 StreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,\r
253                                                            size_t xTriggerLevelBytes,\r
254                                                            BaseType_t xIsMessageBuffer,\r
255                                                            uint8_t * const pucStreamBufferStorageArea,\r
256                                                            StaticStreamBuffer_t * const pxStaticStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
257 \r
258 \r
259 \r
260 #endif /* MPU_PROTOTYPES_H */\r