/* | |
FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd. | |
All rights reserved | |
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. | |
This file is part of the FreeRTOS distribution. | |
FreeRTOS is free software; you can redistribute it and/or modify it under | |
the terms of the GNU General Public License (version 2) as published by the | |
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. | |
*************************************************************************** | |
>>! NOTE: The modification to the GPL is included to allow you to !<< | |
>>! distribute a combined work that includes FreeRTOS without being !<< | |
>>! obliged to provide the source code for proprietary components !<< | |
>>! outside of the FreeRTOS kernel. !<< | |
*************************************************************************** | |
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY | |
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
FOR A PARTICULAR PURPOSE. Full license text is available on the following | |
link: http://www.freertos.org/a00114.html | |
*************************************************************************** | |
* * | |
* FreeRTOS provides completely free yet professionally developed, * | |
* robust, strictly quality controlled, supported, and cross * | |
* platform software that is more than just the market leader, it * | |
* is the industry's de facto standard. * | |
* * | |
* Help yourself get started quickly while simultaneously helping * | |
* to support the FreeRTOS project by purchasing a FreeRTOS * | |
* tutorial book, reference manual, or both: * | |
* http://www.FreeRTOS.org/Documentation * | |
* * | |
*************************************************************************** | |
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading | |
the FAQ page "My application does not run, what could be wrong?". Have you | |
defined configASSERT()? | |
http://www.FreeRTOS.org/support - In return for receiving this top quality | |
embedded software for free we request you assist our global community by | |
participating in the support forum. | |
http://www.FreeRTOS.org/training - Investing in training allows your team to | |
be as productive as possible as early as possible. Now you can receive | |
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers | |
Ltd, and the world's leading authority on the world's leading RTOS. | |
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, | |
including FreeRTOS+Trace - an indispensable productivity tool, a DOS | |
compatible FAT file system, and our tiny thread aware UDP/IP stack. | |
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. | |
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. | |
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High | |
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS | |
licenses offer ticketed support, indemnification and commercial middleware. | |
http://www.SafeRTOS.com - High Integrity Systems also provide a safety | |
engineered and independently SIL3 certified version for use in safety and | |
mission critical applications that require provable dependability. | |
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, uint16_t usStackDepth ) PRIVILEGED_FUNCTION; | |
#endif | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* PORTABLE_H */ | |