129 lines
4.5 KiB
C
129 lines
4.5 KiB
C
/*
|
|
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 */
|