source: S-port/trunk/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h

Last change on this file was 1, checked in by AlexLir, 3 years ago
File size: 8.0 KB
Line 
1/*
2 * FreeRTOS Kernel V10.3.1
3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy of
6 * this software and associated documentation files (the "Software"), to deal in
7 * the Software without restriction, including without limitation the rights to
8 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 * the Software, and to permit persons to whom the Software is furnished to do so,
10 * subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * http://www.FreeRTOS.org
23 * http://aws.amazon.com/freertos
24 *
25 * 1 tab == 4 spaces!
26 */
27
28/*-----------------------------------------------------------
29 * Portable layer API. Each function must be defined for each port.
30 *----------------------------------------------------------*/
31
32#ifndef PORTABLE_H
33#define PORTABLE_H
34
35/* Each FreeRTOS port has a unique portmacro.h header file. Originally a
36pre-processor definition was used to ensure the pre-processor found the correct
37portmacro.h file for the port being used. That scheme was deprecated in favour
38of setting the compiler's include path such that it found the correct
39portmacro.h file - removing the need for the constant and allowing the
40portmacro.h file to be located anywhere in relation to the port being used.
41Purely for reasons of backward compatibility the old method is still valid, but
42to make it clear that new projects should not use it, support for the port
43specific constants has been moved into the deprecated_definitions.h header
44file. */
45#include "deprecated_definitions.h"
46
47/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h
48did not result in a portmacro.h header file being included - and it should be
49included here. In this case the path to the correct portmacro.h header file
50must be set in the compiler's include path. */
51#ifndef portENTER_CRITICAL
52 #include "portmacro.h"
53#endif
54
55#if portBYTE_ALIGNMENT == 32
56 #define portBYTE_ALIGNMENT_MASK ( 0x001f )
57#endif
58
59#if portBYTE_ALIGNMENT == 16
60 #define portBYTE_ALIGNMENT_MASK ( 0x000f )
61#endif
62
63#if portBYTE_ALIGNMENT == 8
64 #define portBYTE_ALIGNMENT_MASK ( 0x0007 )
65#endif
66
67#if portBYTE_ALIGNMENT == 4
68 #define portBYTE_ALIGNMENT_MASK ( 0x0003 )
69#endif
70
71#if portBYTE_ALIGNMENT == 2
72 #define portBYTE_ALIGNMENT_MASK ( 0x0001 )
73#endif
74
75#if portBYTE_ALIGNMENT == 1
76 #define portBYTE_ALIGNMENT_MASK ( 0x0000 )
77#endif
78
79#ifndef portBYTE_ALIGNMENT_MASK
80 #error "Invalid portBYTE_ALIGNMENT definition"
81#endif
82
83#ifndef portNUM_CONFIGURABLE_REGIONS
84 #define portNUM_CONFIGURABLE_REGIONS 1
85#endif
86
87#ifndef portHAS_STACK_OVERFLOW_CHECKING
88 #define portHAS_STACK_OVERFLOW_CHECKING 0
89#endif
90
91#ifndef portARCH_NAME
92 #define portARCH_NAME NULL
93#endif
94
95#ifdef __cplusplus
96extern "C" {
97#endif
98
99#include "mpu_wrappers.h"
100
101/*
102 * Setup the stack of a new task so it is ready to be placed under the
103 * scheduler control. The registers have to be placed on the stack in
104 * the order that the port expects to find them.
105 *
106 */
107#if( portUSING_MPU_WRAPPERS == 1 )
108 #if( portHAS_STACK_OVERFLOW_CHECKING == 1 )
109 StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
110 #else
111 StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
112 #endif
113#else
114 #if( portHAS_STACK_OVERFLOW_CHECKING == 1 )
115 StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION;
116 #else
117 StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION;
118 #endif
119#endif
120
121/* Used by heap_5.c to define the start address and size of each memory region
122that together comprise the total FreeRTOS heap space. */
123typedef struct HeapRegion
124{
125 uint8_t *pucStartAddress;
126 size_t xSizeInBytes;
127} HeapRegion_t;
128
129/* Used to pass information about the heap out of vPortGetHeapStats(). */
130typedef struct xHeapStats
131{
132 size_t xAvailableHeapSpaceInBytes; /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
133 size_t xSizeOfLargestFreeBlockInBytes; /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
134 size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
135 size_t xNumberOfFreeBlocks; /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
136 size_t xMinimumEverFreeBytesRemaining; /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
137 size_t xNumberOfSuccessfulAllocations; /* The number of calls to pvPortMalloc() that have returned a valid memory block. */
138 size_t xNumberOfSuccessfulFrees; /* The number of calls to vPortFree() that has successfully freed a block of memory. */
139} HeapStats_t;
140
141/*
142 * Used to define multiple heap regions for use by heap_5.c. This function
143 * must be called before any calls to pvPortMalloc() - not creating a task,
144 * queue, semaphore, mutex, software timer, event group, etc. will result in
145 * pvPortMalloc being called.
146 *
147 * pxHeapRegions passes in an array of HeapRegion_t structures - each of which
148 * defines a region of memory that can be used as the heap. The array is
149 * terminated by a HeapRegions_t structure that has a size of 0. The region
150 * with the lowest start address must appear first in the array.
151 */
152void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION;
153
154/*
155 * Returns a HeapStats_t structure filled with information about the current
156 * heap state.
157 */
158void vPortGetHeapStats( HeapStats_t *pxHeapStats );
159
160/*
161 * Map to the memory management routines required for the port.
162 */
163void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
164void vPortFree( void *pv ) PRIVILEGED_FUNCTION;
165void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION;
166size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
167size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION;
168
169/*
170 * Setup the hardware ready for the scheduler to take control. This generally
171 * sets up a tick interrupt and sets timers for the correct tick frequency.
172 */
173BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION;
174
175/*
176 * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so
177 * the hardware is left in its original condition after the scheduler stops
178 * executing.
179 */
180void vPortEndScheduler( void ) PRIVILEGED_FUNCTION;
181
182/*
183 * The structures and methods of manipulating the MPU are contained within the
184 * port layer.
185 *
186 * Fills the xMPUSettings structure with the memory region information
187 * contained in xRegions.
188 */
189#if( portUSING_MPU_WRAPPERS == 1 )
190 struct xMEMORY_REGION;
191 void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) PRIVILEGED_FUNCTION;
192#endif
193
194#ifdef __cplusplus
195}
196#endif
197
198#endif /* PORTABLE_H */
199
Note: See TracBrowser for help on using the repository browser.