/* * FreeRTOS Kernel V10.3.1 * 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! *//* ... *//*----------------------------------------------------------- * Portable layer API. Each function must be defined for each port. *----------------------------------------------------------*//* ... */#ifndefPORTABLE_H#definePORTABLE_H/* Each FreeRTOS port has a unique portmacro.h header file. Originally apre-processor definition was used to ensure the pre-processor found the correctportmacro.h file for the port being used. That scheme was deprecated in favourof setting the compiler's include path such that it found the correctportmacro.h file - removing the need for the constant and allowing theportmacro.h file to be located anywhere in relation to the port being used.Purely for reasons of backward compatibility the old method is still valid, butto make it clear that new projects should not use it, support for the portspecific constants has been moved into the deprecated_definitions.h headerfile. *//* ... */#include"deprecated_definitions.h"/* If portENTER_CRITICAL is not defined then including deprecated_definitions.hdid not result in a portmacro.h header file being included - and it should beincluded here. In this case the path to the correct portmacro.h header filemust be set in the compiler's include path. *//* ... */#ifndefportENTER_CRITICAL#include"portmacro.h"#endif#ifportBYTE_ALIGNMENT==32#defineportBYTE_ALIGNMENT_MASK(0x001f)#endif#ifportBYTE_ALIGNMENT==16#defineportBYTE_ALIGNMENT_MASK(0x000f)#endif#ifportBYTE_ALIGNMENT==8#defineportBYTE_ALIGNMENT_MASK(0x0007)#endif#ifportBYTE_ALIGNMENT==4#defineportBYTE_ALIGNMENT_MASK(0x0003)#endif#ifportBYTE_ALIGNMENT==2#defineportBYTE_ALIGNMENT_MASK(0x0001)#endif#ifportBYTE_ALIGNMENT==1#defineportBYTE_ALIGNMENT_MASK(0x0000)#endif#ifndefportBYTE_ALIGNMENT_MASK#error"Invalid portBYTE_ALIGNMENT definition"#endif#ifndefportNUM_CONFIGURABLE_REGIONS#defineportNUM_CONFIGURABLE_REGIONS1#endif#ifndefportHAS_STACK_OVERFLOW_CHECKING#defineportHAS_STACK_OVERFLOW_CHECKING0#endif#ifndefportARCH_NAME#defineportARCH_NAMENULL#endif#ifdef__cplusplusextern"C"{#endif#include"mpu_wrappers.h"/* * Setup the stack of a new task so it is ready to be placed under the * scheduler control. The registers have to be placed on the stack in * the order that the port expects to find them. * *//* ... */#if(portUSING_MPU_WRAPPERS==1)#if(portHAS_STACK_OVERFLOW_CHECKING==1)StackType_t*pxPortInitialiseStack(StackType_t*pxTopOfStack,StackType_t*pxEndOfStack,TaskFunction_tpxCode,void*pvParameters,BaseType_txRunPrivileged)PRIVILEGED_FUNCTION;#elseStackType_t*pxPortInitialiseStack(StackType_t*pxTopOfStack,TaskFunction_tpxCode,void*pvParameters,BaseType_txRunPrivileged)PRIVILEGED_FUNCTION;#endif/* ... */#else#if(portHAS_STACK_OVERFLOW_CHECKING==1)StackType_t*pxPortInitialiseStack(StackType_t*pxTopOfStack,StackType_t*pxEndOfStack,TaskFunction_tpxCode,void*pvParameters)PRIVILEGED_FUNCTION;#elseStackType_t*pxPortInitialiseStack(StackType_t*pxTopOfStack,TaskFunction_tpxCode,void*pvParameters)PRIVILEGED_FUNCTION;#endif/* ... */#endif/* Used by heap_5.c to define the start address and size of each memory regionthat together comprise the total FreeRTOS heap space. *//* ... */typedefstructHeapRegion{uint8_t*pucStartAddress;size_txSizeInBytes;...}HeapRegion_t;/* Used to pass information about the heap out of vPortGetHeapStats(). */typedefstructxHeapStats{size_txAvailableHeapSpaceInBytes;/* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */size_txSizeOfLargestFreeBlockInBytes;/* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */size_txSizeOfSmallestFreeBlockInBytes;/* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */size_txNumberOfFreeBlocks;/* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */size_txMinimumEverFreeBytesRemaining;/* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */size_txNumberOfSuccessfulAllocations;/* The number of calls to pvPortMalloc() that have returned a valid memory block. */size_txNumberOfSuccessfulFrees;/* The number of calls to vPortFree() that has successfully freed a block of memory. */...}HeapStats_t;/* * Used to define multiple heap regions for use by heap_5.c. This function * must be called before any calls to pvPortMalloc() - not creating a task, * queue, semaphore, mutex, software timer, event group, etc. will result in * pvPortMalloc being called. * * pxHeapRegions passes in an array of HeapRegion_t structures - each of which * defines a region of memory that can be used as the heap. The array is * terminated by a HeapRegions_t structure that has a size of 0. The region * with the lowest start address must appear first in the array. *//* ... */voidvPortDefineHeapRegions(constHeapRegion_t*constpxHeapRegions)PRIVILEGED_FUNCTION;/* * Returns a HeapStats_t structure filled with information about the current * heap state. *//* ... */voidvPortGetHeapStats(HeapStats_t*pxHeapStats);/* * Map to the memory management routines required for the port. *//* ... */void*pvPortMalloc(size_txSize)PRIVILEGED_FUNCTION;voidvPortFree(void*pv)PRIVILEGED_FUNCTION;voidvPortInitialiseBlocks(void)PRIVILEGED_FUNCTION;size_txPortGetFreeHeapSize(void)PRIVILEGED_FUNCTION;size_txPortGetMinimumEverFreeHeapSize(void)PRIVILEGED_FUNCTION;/* * Setup the hardware ready for the scheduler to take control. This generally * sets up a tick interrupt and sets timers for the correct tick frequency. *//* ... */BaseType_txPortStartScheduler(void)PRIVILEGED_FUNCTION;/* * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so * the hardware is left in its original condition after the scheduler stops * executing. *//* ... */voidvPortEndScheduler(void)PRIVILEGED_FUNCTION;/* * The structures and methods of manipulating the MPU are contained within the * port layer. * * Fills the xMPUSettings structure with the memory region information * contained in xRegions. *//* ... */#if(portUSING_MPU_WRAPPERS==1)structxMEMORY_REGION;voidvPortStoreTaskMPUSettings(xMPU_SETTINGS*xMPUSettings,conststructxMEMORY_REGION*constxRegions,StackType_t*pxBottomOfStack,uint32_tulStackDepth)PRIVILEGED_FUNCTION;/* ... */#endif#ifdef__cplusplus}extern "C" { ... }#endif/* ... */#endif/* PORTABLE_H */
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.