/* POSIX Simulator Tested with FreeRTOS V8.2.2 1 tab == 4 spaces! */ #ifndef PORTMACRO_H #define PORTMACRO_H #ifdef __cplusplus extern "C" { #endif /****************************************************************************** Defines ******************************************************************************/ /* Type definitions. */ #define portCHAR char #define portFLOAT float #define portDOUBLE double #define portLONG long #define portSHORT short #define portSTACK_TYPE size_t #define portBASE_TYPE long #define portPOINTER_SIZE_TYPE size_t typedef portSTACK_TYPE StackType_t; typedef long BaseType_t; typedef unsigned long UBaseType_t; #if( configUSE_16_BIT_TICKS == 1 ) typedef uint16_t TickType_t; #define portMAX_DELAY ( TickType_t ) 0xffff #else typedef uint32_t TickType_t; #define portMAX_DELAY ( TickType_t ) 0xffffffffUL /* 32/64-bit tick type on a 32/64-bit architecture, so reads of the tick count do not need to be guarded with a critical section. */ #define portTICK_TYPE_IS_ATOMIC 1 #endif /* Hardware specifics. */ #define portSTACK_GROWTH ( -1 ) #define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) #define portINLINE __inline__ #if defined( __x86_64__) #define portBYTE_ALIGNMENT 8 #else #define portBYTE_ALIGNMENT 4 #endif //TODO: check portREMOVE_STATIC_QUALIFIER #define portREMOVE_STATIC_QUALIFIER /*-----------------------------------------------------------*/ /* Scheduler utilities. */ extern void vPortYieldFromISR( void ); extern void vPortYield( void ); #define portYIELD() vPortYield() #define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) vPortYieldFromISR() #define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) /*-----------------------------------------------------------*/ /* Critical section management. */ extern BaseType_t xPortSetInterruptMask( void ); extern void vPortClearInterruptMask( portBASE_TYPE xMask ); #define portSET_INTERRUPT_MASK_FROM_ISR() xPortSetInterruptMask() #define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x) extern void vPortDisableInterrupts( void ); extern void vPortEnableInterrupts( void ); #define portSET_INTERRUPT_MASK() ( vPortDisableInterrupts() ) #define portCLEAR_INTERRUPT_MASK() ( vPortEnableInterrupts() ) #define portDISABLE_INTERRUPTS() portSET_INTERRUPT_MASK() #define portENABLE_INTERRUPTS() portCLEAR_INTERRUPT_MASK() extern void vPortEnterCritical( void ); extern void vPortExitCritical( void ); #define portENTER_CRITICAL() vPortEnterCritical() #define portEXIT_CRITICAL() vPortExitCritical() /*-----------------------------------------------------------*/ /* 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 portNOP() #define portOUTPUT_BYTE( a, b ) extern void vPortForciblyEndThread( void *pxTaskToDelete ); #define traceTASK_DELETE( pxTaskToDelete ) vPortForciblyEndThread( pxTaskToDelete ) extern void vPortAddTaskHandle( void *pxTaskHandle ); #define traceTASK_CREATE( pxNewTCB ) vPortAddTaskHandle( pxNewTCB ) /* Posix Signal definitions that can be changed or read as appropriate. */ #define SIG_SUSPEND SIGUSR1 #define SIG_RESUME SIGUSR2 /* Enable the following hash defines to make use of the real-time tick where time progresses at real-time. */ #define SIG_TICK SIGALRM #define TIMER_TYPE ITIMER_REAL /* Enable the following hash defines to make use of the process tick where time progresses only when the process is executing. #define SIG_TICK SIGVTALRM #define TIMER_TYPE ITIMER_VIRTUAL */ /* Enable the following hash defines to make use of the profile tick where time progresses when the process or system calls are executing. #define SIG_TICK SIGPROF #define TIMER_TYPE ITIMER_PROF */ /* Make use of times(man 2) to gather run-time statistics on the tasks. */ extern void vPortFindTicksPerSecond( void ); #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vPortFindTicksPerSecond() /* Nothing to do because the timer is already present. */ extern unsigned long ulPortGetTimerValue( void ); #define portGET_RUN_TIME_COUNTER_VALUE() ulPortGetTimerValue() /* Query the System time stats for this process. */ #ifdef __cplusplus } /* extern C */ #endif #endif /* PORTMACRO_H */