| 
									
										
										
										
											2018-03-01 21:15:06 +07:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2018-05-17 16:06:57 +07:00
										 |  |  |  * FreeRTOS Kernel V10.0.1 | 
					
						
							| 
									
										
										
										
											2018-03-01 21:15:06 +07:00
										 |  |  |  * Copyright (C) 2017 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 | 
					
						
							| 
									
										
										
										
											2018-05-17 16:06:57 +07:00
										 |  |  |  * copies or substantial portions of the Software. | 
					
						
							| 
									
										
										
										
											2018-03-01 21:15:06 +07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  *----------------------------------------------------------*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef PORTABLE_H
 | 
					
						
							|  |  |  | #define PORTABLE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Each FreeRTOS port has a unique portmacro.h header file.  Originally a
 | 
					
						
							|  |  |  | pre-processor definition was used to ensure the pre-processor found the correct | 
					
						
							|  |  |  | portmacro.h file for the port being used.  That scheme was deprecated in favour | 
					
						
							|  |  |  | of setting the compiler's include path such that it found the correct | 
					
						
							|  |  |  | portmacro.h file - removing the need for the constant and allowing the | 
					
						
							|  |  |  | portmacro.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, but | 
					
						
							|  |  |  | to make it clear that new projects should not use it, support for the port | 
					
						
							|  |  |  | specific constants has been moved into the deprecated_definitions.h header | 
					
						
							|  |  |  | file. */ | 
					
						
							|  |  |  | #include "deprecated_definitions.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* If portENTER_CRITICAL is not defined then including deprecated_definitions.h
 | 
					
						
							|  |  |  | did not result in a portmacro.h header file being included - and it should be | 
					
						
							|  |  |  | included here.  In this case the path to the correct portmacro.h header file | 
					
						
							|  |  |  | must be set in the compiler's include path. */ | 
					
						
							|  |  |  | #ifndef portENTER_CRITICAL
 | 
					
						
							|  |  |  | 	#include "portmacro.h"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 32
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK ( 0x001f )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 16
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK ( 0x000f )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 8
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK ( 0x0007 )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 4
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK	( 0x0003 )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 2
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK	( 0x0001 )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if portBYTE_ALIGNMENT == 1
 | 
					
						
							|  |  |  | 	#define portBYTE_ALIGNMENT_MASK	( 0x0000 )
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef portBYTE_ALIGNMENT_MASK
 | 
					
						
							|  |  |  | 	#error "Invalid portBYTE_ALIGNMENT definition"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef portNUM_CONFIGURABLE_REGIONS
 | 
					
						
							|  |  |  | 	#define portNUM_CONFIGURABLE_REGIONS 1
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | extern "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 )
 | 
					
						
							|  |  |  | 	StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 	StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Used by heap_5.c. */ | 
					
						
							|  |  |  | typedef struct HeapRegion | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	uint8_t *pucStartAddress; | 
					
						
							|  |  |  | 	size_t xSizeInBytes; | 
					
						
							|  |  |  | } HeapRegion_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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Map to the memory management routines required for the port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | void vPortFree( void *pv ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | size_t xPortGetMinimumEverFreeHeapSize( 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_t xPortStartScheduler( 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void vPortEndScheduler( 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 )
 | 
					
						
							|  |  |  | 	struct xMEMORY_REGION; | 
					
						
							|  |  |  | 	void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) PRIVILEGED_FUNCTION; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* PORTABLE_H */
 | 
					
						
							|  |  |  | 
 |