/*
FreeRTOS V7 .3 .0 - Copyright ( C ) 2012 Real Time Engineers Ltd .
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME . PLEASE VISIT
http : //www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* FreeRTOS tutorial books are available in pdf and paperback . *
* Complete , revised , and edited pdf reference manuals are also *
* available . *
* *
* Purchasing FreeRTOS documentation will not only help you , by *
* ensuring you get running as quickly as possible and with an *
* in - depth knowledge of how to use FreeRTOS , it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade , cross platform , de facto standard solutions *
* for microcontrollers - completely free of charge ! *
* *
* > > > See http : //www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS , and thank you for your support ! *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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 . See the GNU General Public License for
more details . You should have received a copy of the GNU General Public
License and the FreeRTOS license exception along with FreeRTOS ; if not it
can be viewed here : http : //www.freertos.org/a00114.html and also obtained
by writing to Richard Barry , contact details for whom are available on the
FreeRTOS WEB site .
1 tab = = 4 spaces !
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Having a problem ? Start by reading the FAQ " My application does *
* not run , what could be wrong ? " *
* *
* http : //www.FreeRTOS.org/FAQHelp.html *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
http : //www.FreeRTOS.org - Documentation, training, latest versions, license
and contact details .
http : //www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS + Trace - an indispensable productivity tool .
Real Time Engineers ltd license FreeRTOS to High Integrity Systems , who sell
the code with commercial support , indemnification , and middleware , under
the OpenRTOS brand : http : //www.OpenRTOS.com. High Integrity Systems also
provide a safety engineered and independently SIL3 certified version under
the SafeRTOS brand : http : //www.SafeRTOS.com.
*/
# ifndef PORTMACRO_H
# define PORTMACRO_H
# include <Windows.h>
/******************************************************************************
Defines
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* Type definitions. */
# define portCHAR char
# define portFLOAT float
# define portDOUBLE double
# define portLONG long
# define portSHORT short
# define portSTACK_TYPE unsigned portLONG
# define portBASE_TYPE portLONG
# if( configUSE_16_BIT_TICKS == 1 )
typedef unsigned portSHORT portTickType ;
# define portMAX_DELAY ( portTickType ) 0xffff
# else
typedef unsigned portLONG portTickType ;
# define portMAX_DELAY ( portTickType ) 0xffffffff
# endif
/* Hardware specifics. */
# define portSTACK_GROWTH ( -1 )
# define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
# define portBYTE_ALIGNMENT 4
# define portYIELD() vPortGenerateSimulatedInterrupt( portINTERRUPT_YIELD )
void vPortDeleteThread ( void * pvThreadToDelete ) ;
# define portCLEAN_UP_TCB( pxTCB ) vPortDeleteThread( pxTCB )
# define portDISABLE_INTERRUPTS()
# define portENABLE_INTERRUPTS()
/* Critical section handling. */
void vPortEnterCritical ( void ) ;
void vPortExitCritical ( void ) ;
# define portENTER_CRITICAL() vPortEnterCritical()
# define portEXIT_CRITICAL() vPortExitCritical()
# ifndef __GNUC__
# if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
/* Check the configuration. */
# if( configMAX_PRIORITIES > 32 )
# error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
# endif
/* Store/clear the ready priorities in a bit map. */
# define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )
# define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )
/*-----------------------------------------------------------*/
/* BitScanReverse returns the bit position of the most significant '1'
in the word . */
# define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) _BitScanReverse( ( DWORD * ) &( uxTopPriority ), ( uxReadyPriorities ) )
# endif /* taskRECORD_READY_PRIORITY */
# endif /* __GNUC__ */
/* Task function macros as described on the FreeRTOS.org WEB site. */
# define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void * pvParameters )
# define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void * pvParameters )
# define portINTERRUPT_YIELD ( 0UL )
# define portINTERRUPT_TICK ( 1UL )
/*
* Raise a simulated interrupt represented by the bit mask in ulInterruptMask .
* Each bit can be used to represent an individual interrupt - with the first
* two bits being used for the Yield and Tick interrupts respectively .
*/
void vPortGenerateSimulatedInterrupt ( unsigned long ulInterruptNumber ) ;
/*
* Install an interrupt handler to be called by the simulated interrupt handler
* thread . The interrupt number must be above any used by the kernel itself
* ( at the time of writing the kernel was using interrupt numbers 0 , 1 , and 2
* as defined above ) . The number must also be lower than 32.
*
* Interrupt handler functions must return a non - zero value if executing the
* handler resulted in a task switch being required .
*/
void vPortSetInterruptHandler ( unsigned long ulInterruptNumber , unsigned long ( * pvHandler ) ( void ) ) ;
# endif