86 #define portFLOAT float
87 #define portDOUBLE double
89 #define portSHORT short
90 #define portSTACK_TYPE uint32_t
91 #define portBASE_TYPE long
97 #if( configUSE_16_BIT_TICKS == 1 )
99 #define portMAX_DELAY ( TickType_t ) 0xffff
102 #define portMAX_DELAY ( TickType_t ) 0xffffffffUL
107 #define portSTACK_GROWTH ( -1 )
108 #define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
109 #define portBYTE_ALIGNMENT 8
115 #define portNVIC_INT_CTRL_REG ( * ( ( volatile uint32_t * ) 0xe000ed04 ) )
116 #define portNVIC_PENDSVSET_BIT ( 1UL << 28UL )
117 #define portYIELD() vPortYield()
118 #define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT
119 #define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
127 #define portSET_INTERRUPT_MASK_FROM_ISR() ulPortSetInterruptMask()
128 #define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x)
129 #define portDISABLE_INTERRUPTS() ulPortSetInterruptMask()
130 #define portENABLE_INTERRUPTS() vPortClearInterruptMask(0)
131 #define portENTER_CRITICAL() vPortEnterCritical()
132 #define portEXIT_CRITICAL() vPortExitCritical()
138 #define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
139 #define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
143 #ifndef portSUPPRESS_TICKS_AND_SLEEP
145 #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vPortSuppressTicksAndSleep( xExpectedIdleTime )
150 #if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
153 __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap )
157 __asm
volatile (
"clz %0, %1" :
"=r" ( ucReturn ) :
"r" ( ulBitmap ) );
162 #if( configMAX_PRIORITIES > 32 )
163 #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.
167 #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )
168 #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )
172 #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31 - ucPortCountLeadingZeros( ( uxReadyPriorities ) ) )
179 void vPortValidateInterruptPriority(
void );
180 #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()
void vPortClearInterruptMask(uint32_t ulNewMaskValue)
void vPortExitCritical(void)
unsigned long UBaseType_t
void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime)
void vPortEnterCritical(void)
portSTACK_TYPE StackType_t
uint32_t ulPortSetInterruptMask(void)