Prusa MINI Firmware overview
port.c File Reference
#include "FreeRTOS.h"
#include "task.h"

Macros

#define configSYSTICK_CLOCK_HZ   configCPU_CLOCK_HZ
 
#define portNVIC_SYSTICK_CLK_BIT   ( 1UL << 2UL )
 
#define portNVIC_SYSTICK_CTRL_REG   ( * ( ( volatile uint32_t * ) 0xe000e010 ) )
 
#define portNVIC_SYSTICK_LOAD_REG   ( * ( ( volatile uint32_t * ) 0xe000e014 ) )
 
#define portNVIC_SYSTICK_CURRENT_VALUE_REG   ( * ( ( volatile uint32_t * ) 0xe000e018 ) )
 
#define portNVIC_SYSPRI2_REG   ( * ( ( volatile uint32_t * ) 0xe000ed20 ) )
 
#define portNVIC_SYSTICK_INT_BIT   ( 1UL << 1UL )
 
#define portNVIC_SYSTICK_ENABLE_BIT   ( 1UL << 0UL )
 
#define portNVIC_SYSTICK_COUNT_FLAG_BIT   ( 1UL << 16UL )
 
#define portNVIC_PENDSVCLEAR_BIT   ( 1UL << 27UL )
 
#define portNVIC_PEND_SYSTICK_CLEAR_BIT   ( 1UL << 25UL )
 
#define portCPUID   ( * ( ( volatile uint32_t * ) 0xE000ed00 ) )
 
#define portCORTEX_M7_r0p1_ID   ( 0x410FC271UL )
 
#define portCORTEX_M7_r0p0_ID   ( 0x410FC270UL )
 
#define portNVIC_PENDSV_PRI   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL )
 
#define portNVIC_SYSTICK_PRI   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL )
 
#define portFIRST_USER_INTERRUPT_NUMBER   ( 16 )
 
#define portNVIC_IP_REGISTERS_OFFSET_16   ( 0xE000E3F0 )
 
#define portAIRCR_REG   ( * ( ( volatile uint32_t * ) 0xE000ED0C ) )
 
#define portMAX_8_BIT_VALUE   ( ( uint8_t ) 0xff )
 
#define portTOP_BIT_OF_BYTE   ( ( uint8_t ) 0x80 )
 
#define portMAX_PRIGROUP_BITS   ( ( uint8_t ) 7 )
 
#define portPRIORITY_GROUP_MASK   ( 0x07UL << 8UL )
 
#define portPRIGROUP_SHIFT   ( 8UL )
 
#define portVECTACTIVE_MASK   ( 0xFFUL )
 
#define portFPCCR   ( ( volatile uint32_t * ) 0xe000ef34 ) /* Floating point context control register. */
 
#define portASPEN_AND_LSPEN_BITS   ( 0x3UL << 30UL )
 
#define portINITIAL_XPSR   ( 0x01000000 )
 
#define portINITIAL_EXEC_RETURN   ( 0xfffffffd )
 
#define portMAX_24_BIT_NUMBER   ( 0xffffffUL )
 
#define portSTART_ADDRESS_MASK   ( ( StackType_t ) 0xfffffffeUL )
 
#define portMISSED_COUNTS_FACTOR   ( 45UL )
 
#define portTASK_RETURN_ADDRESS   prvTaskExitError
 

Functions

void vPortSetupTimerInterrupt (void)
 
void xPortPendSVHandler (void xPortSysTickHandler void)
 
static void prvTaskExitError (void)
 
void vPortSVCHandler (void)
 
static void prvPortStartFirstTask (void)
 
BaseType_t xPortStartScheduler (void)
 
void vPortEndScheduler (void)
 
void vPortEnterCritical (void)
 
void vPortExitCritical (void)
 
void xPortPendSVHandler (void)
 
void xPortSysTickHandler (void)
 
 __attribute__ ((weak))
 
static void vPortEnableVFP (void)
 

Variables

static UBaseType_t uxCriticalNesting = 0xaaaaaaaa
 

Macro Definition Documentation

◆ configSYSTICK_CLOCK_HZ

#define configSYSTICK_CLOCK_HZ   configCPU_CLOCK_HZ

◆ portNVIC_SYSTICK_CLK_BIT

#define portNVIC_SYSTICK_CLK_BIT   ( 1UL << 2UL )

◆ portNVIC_SYSTICK_CTRL_REG

#define portNVIC_SYSTICK_CTRL_REG   ( * ( ( volatile uint32_t * ) 0xe000e010 ) )

◆ portNVIC_SYSTICK_LOAD_REG

#define portNVIC_SYSTICK_LOAD_REG   ( * ( ( volatile uint32_t * ) 0xe000e014 ) )

◆ portNVIC_SYSTICK_CURRENT_VALUE_REG

#define portNVIC_SYSTICK_CURRENT_VALUE_REG   ( * ( ( volatile uint32_t * ) 0xe000e018 ) )

◆ portNVIC_SYSPRI2_REG

#define portNVIC_SYSPRI2_REG   ( * ( ( volatile uint32_t * ) 0xe000ed20 ) )

◆ portNVIC_SYSTICK_INT_BIT

#define portNVIC_SYSTICK_INT_BIT   ( 1UL << 1UL )

◆ portNVIC_SYSTICK_ENABLE_BIT

#define portNVIC_SYSTICK_ENABLE_BIT   ( 1UL << 0UL )

◆ portNVIC_SYSTICK_COUNT_FLAG_BIT

#define portNVIC_SYSTICK_COUNT_FLAG_BIT   ( 1UL << 16UL )

◆ portNVIC_PENDSVCLEAR_BIT

#define portNVIC_PENDSVCLEAR_BIT   ( 1UL << 27UL )

◆ portNVIC_PEND_SYSTICK_CLEAR_BIT

#define portNVIC_PEND_SYSTICK_CLEAR_BIT   ( 1UL << 25UL )

◆ portCPUID

#define portCPUID   ( * ( ( volatile uint32_t * ) 0xE000ed00 ) )

◆ portCORTEX_M7_r0p1_ID

#define portCORTEX_M7_r0p1_ID   ( 0x410FC271UL )

◆ portCORTEX_M7_r0p0_ID

#define portCORTEX_M7_r0p0_ID   ( 0x410FC270UL )

◆ portNVIC_PENDSV_PRI

#define portNVIC_PENDSV_PRI   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL )

◆ portNVIC_SYSTICK_PRI

#define portNVIC_SYSTICK_PRI   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL )

◆ portFIRST_USER_INTERRUPT_NUMBER

#define portFIRST_USER_INTERRUPT_NUMBER   ( 16 )

◆ portNVIC_IP_REGISTERS_OFFSET_16

#define portNVIC_IP_REGISTERS_OFFSET_16   ( 0xE000E3F0 )

◆ portAIRCR_REG

#define portAIRCR_REG   ( * ( ( volatile uint32_t * ) 0xE000ED0C ) )

◆ portMAX_8_BIT_VALUE

#define portMAX_8_BIT_VALUE   ( ( uint8_t ) 0xff )

◆ portTOP_BIT_OF_BYTE

#define portTOP_BIT_OF_BYTE   ( ( uint8_t ) 0x80 )

◆ portMAX_PRIGROUP_BITS

#define portMAX_PRIGROUP_BITS   ( ( uint8_t ) 7 )

◆ portPRIORITY_GROUP_MASK

#define portPRIORITY_GROUP_MASK   ( 0x07UL << 8UL )

◆ portPRIGROUP_SHIFT

#define portPRIGROUP_SHIFT   ( 8UL )

◆ portVECTACTIVE_MASK

#define portVECTACTIVE_MASK   ( 0xFFUL )

◆ portFPCCR

#define portFPCCR   ( ( volatile uint32_t * ) 0xe000ef34 ) /* Floating point context control register. */

◆ portASPEN_AND_LSPEN_BITS

#define portASPEN_AND_LSPEN_BITS   ( 0x3UL << 30UL )

◆ portINITIAL_XPSR

#define portINITIAL_XPSR   ( 0x01000000 )

◆ portINITIAL_EXEC_RETURN

#define portINITIAL_EXEC_RETURN   ( 0xfffffffd )

◆ portMAX_24_BIT_NUMBER

#define portMAX_24_BIT_NUMBER   ( 0xffffffUL )

◆ portSTART_ADDRESS_MASK

#define portSTART_ADDRESS_MASK   ( ( StackType_t ) 0xfffffffeUL )

◆ portMISSED_COUNTS_FACTOR

#define portMISSED_COUNTS_FACTOR   ( 45UL )

◆ portTASK_RETURN_ADDRESS

#define portTASK_RETURN_ADDRESS   prvTaskExitError

Function Documentation

◆ vPortSetupTimerInterrupt()

void vPortSetupTimerInterrupt ( void  )
Here is the caller graph for this function:

◆ xPortPendSVHandler() [1/2]

void xPortPendSVHandler ( void xPortSysTickHandler  void)
230 {
231  /* Simulate the stack frame as it would be created by a context switch
232  interrupt. */
233 
234  /* Offset added to account for the way the MCU uses the stack on entry/exit
235  of interrupts, and to ensure alignment. */
236  pxTopOfStack--;
237 
238  *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
239  pxTopOfStack--;
240  *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
241  pxTopOfStack--;
242  *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
243 
244  /* Save code space by skipping register initialisation. */
245  pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
246  *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
247 
248  /* A save method is being used that requires each task to maintain its
249  own exec return value. */
250  pxTopOfStack--;
251  *pxTopOfStack = portINITIAL_EXEC_RETURN;
252 
253  pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
254 
255  return pxTopOfStack;
256 }

◆ prvTaskExitError()

static void prvTaskExitError ( void  )
static
260 {
261  /* A function that implements a task must not exit or attempt to return to
262  its caller as there is nothing to return to. If a task wants to exit it
263  should instead call vTaskDelete( NULL ).
264 
265  Artificially force an assert() to be triggered if configASSERT() is
266  defined, then stop here so application writers can catch the error. */
267  configASSERT( uxCriticalNesting == ~0UL );
269  for( ;; );
270 }
Here is the caller graph for this function:

◆ vPortSVCHandler()

void vPortSVCHandler ( void  )
274 {
275  __asm volatile (
276  " ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */
277  " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */
278  " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */
279  " ldmia r0!, {r4-r11, r14} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */
280  " msr psp, r0 \n" /* Restore the task stack pointer. */
281  " isb \n"
282  " mov r0, #0 \n"
283  " msr basepri, r0 \n"
284  " bx r14 \n"
285  " \n"
286  " .align 4 \n"
287  "pxCurrentTCBConst2: .word pxCurrentTCB \n"
288  );
289 }

◆ prvPortStartFirstTask()

static void prvPortStartFirstTask ( void  )
static
293 {
294  __asm volatile(
295  " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */
296  " ldr r0, [r0] \n"
297  " ldr r0, [r0] \n"
298  " msr msp, r0 \n" /* Set the msp back to the start of the stack. */
299  " cpsie i \n" /* Globally enable interrupts. */
300  " cpsie f \n"
301  " dsb \n"
302  " isb \n"
303  " svc 0 \n" /* System call to start first task. */
304  " nop \n"
305  );
306 }
Here is the caller graph for this function:

◆ xPortStartScheduler()

BaseType_t xPortStartScheduler ( void  )
313 {
314  /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.
315  See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
317 
318  /* This port can be used on all revisions of the Cortex-M7 core other than
319  the r0p1 parts. r0p1 parts should use the port from the
320  /source/portable/GCC/ARM_CM7/r0p1 directory. */
323 
324  #if( configASSERT_DEFINED == 1 )
325  {
326  volatile uint32_t ulOriginalPriority;
327  volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
328  volatile uint8_t ucMaxPriorityValue;
329 
330  /* Determine the maximum priority from which ISR safe FreeRTOS API
331  functions can be called. ISR safe functions are those that end in
332  "FromISR". FreeRTOS maintains separate thread and ISR API functions to
333  ensure interrupt entry is as fast and simple as possible.
334 
335  Save the interrupt priority value that is about to be clobbered. */
336  ulOriginalPriority = *pucFirstUserPriorityRegister;
337 
338  /* Determine the number of priority bits available. First write to all
339  possible bits. */
340  *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
341 
342  /* Read the value back to see how many bits stuck. */
343  ucMaxPriorityValue = *pucFirstUserPriorityRegister;
344 
345  /* Use the same mask on the maximum system call priority. */
346  ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
347 
348  /* Calculate the maximum acceptable priority group value for the number
349  of bits read back. */
350  ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
351  while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
352  {
353  ulMaxPRIGROUPValue--;
354  ucMaxPriorityValue <<= ( uint8_t ) 0x01;
355  }
356 
357  /* Shift the priority group value back to its position within the AIRCR
358  register. */
359  ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
360  ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
361 
362  /* Restore the clobbered interrupt priority register to its original
363  value. */
364  *pucFirstUserPriorityRegister = ulOriginalPriority;
365  }
366  #endif /* conifgASSERT_DEFINED */
367 
368  /* Make PendSV and SysTick the lowest priority interrupts. */
371 
372  /* Start the timer that generates the tick ISR. Interrupts are disabled
373  here already. */
375 
376  /* Initialise the critical nesting count ready for the first task. */
377  uxCriticalNesting = 0;
378 
379  /* Ensure the VFP is enabled - it should be anyway. */
380  vPortEnableVFP();
381 
382  /* Lazy save always. */
384 
385  /* Start the first task. */
387 
388  /* Should never get here as the tasks will now be executing! Call the task
389  exit error function to prevent compiler warnings about a static function
390  not being called in the case that the application writer overrides this
391  functionality by defining configTASK_RETURN_ADDRESS. */
393 
394  /* Should not get here! */
395  return 0;
396 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ vPortEndScheduler()

void vPortEndScheduler ( void  )
400 {
401  /* Not implemented in ports where there is nothing to return to.
402  Artificially force an assert. */
403  configASSERT( uxCriticalNesting == 1000UL );
404 }
Here is the caller graph for this function:

◆ vPortEnterCritical()

void vPortEnterCritical ( void  )
408 {
411 
412  /* This is not the interrupt safe version of the enter critical function so
413  assert() if it is being called from an interrupt context. Only API
414  functions that end in "FromISR" can be used in an interrupt. Only assert if
415  the critical nesting count is 1 to protect against recursive calls if the
416  assert function also uses a critical section. */
417  if( uxCriticalNesting == 1 )
418  {
420  }
421 }
Here is the caller graph for this function:

◆ vPortExitCritical()

void vPortExitCritical ( void  )
425 {
428  if( uxCriticalNesting == 0 )
429  {
431  }
432 }
Here is the caller graph for this function:

◆ xPortPendSVHandler() [2/2]

void xPortPendSVHandler ( void  )
436 {
437  /* This is a naked function. */
438 
439  __asm volatile
440  (
441  " mrs r0, psp \n"
442  " isb \n"
443  " \n"
444  " ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */
445  " ldr r2, [r3] \n"
446  " \n"
447  " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, push high vfp registers. */
448  " it eq \n"
449  " vstmdbeq r0!, {s16-s31} \n"
450  " \n"
451  " stmdb r0!, {r4-r11, r14} \n" /* Save the core registers. */
452  " \n"
453  " str r0, [r2] \n" /* Save the new top of stack into the first member of the TCB. */
454  " \n"
455  " stmdb sp!, {r3} \n"
456  " mov r0, %0 \n"
457  " msr basepri, r0 \n"
458  " dsb \n"
459  " isb \n"
460  " bl vTaskSwitchContext \n"
461  " mov r0, #0 \n"
462  " msr basepri, r0 \n"
463  " ldmia sp!, {r3} \n"
464  " \n"
465  " ldr r1, [r3] \n" /* The first item in pxCurrentTCB is the task top of stack. */
466  " ldr r0, [r1] \n"
467  " \n"
468  " ldmia r0!, {r4-r11, r14} \n" /* Pop the core registers. */
469  " \n"
470  " tst r14, #0x10 \n" /* Is the task using the FPU context? If so, pop the high vfp registers too. */
471  " it eq \n"
472  " vldmiaeq r0!, {s16-s31} \n"
473  " \n"
474  " msr psp, r0 \n"
475  " isb \n"
476  " \n"
477  #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata workaround. */
478  #if WORKAROUND_PMU_CM001 == 1
479  " push { r14 } \n"
480  " pop { pc } \n"
481  #endif
482  #endif
483  " \n"
484  " bx r14 \n"
485  " \n"
486  " .align 4 \n"
487  "pxCurrentTCBConst: .word pxCurrentTCB \n"
489  );
490 }

◆ xPortSysTickHandler()

void xPortSysTickHandler ( void  )
494 {
495  /* The SysTick runs at the lowest interrupt priority, so when this interrupt
496  executes all interrupts must be unmasked. There is therefore no need to
497  save and then restore the interrupt mask value as its value is already
498  known. */
500  {
501  /* Increment the RTOS tick. */
502  if( xTaskIncrementTick() != pdFALSE )
503  {
504  /* A context switch is required. Context switching is performed in
505  the PendSV interrupt. Pend the PendSV interrupt. */
507  }
508  }
510 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ __attribute__()

__attribute__ ( (weak)  )
672 {
673  /* Calculate the constants required to configure the tick interrupt. */
674  #if configUSE_TICKLESS_IDLE == 1
675  {
676  ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );
677  xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;
678  ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
679  }
680  #endif /* configUSE_TICKLESS_IDLE */
681 
682  /* Configure SysTick to interrupt at the requested rate. */
685 }

◆ vPortEnableVFP()

static void vPortEnableVFP ( void  )
static
690 {
691  __asm volatile
692  (
693  " ldr.w r0, =0xE000ED88 \n" /* The FPU enable bits are in the CPACR. */
694  " ldr r1, [r0] \n"
695  " \n"
696  " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
697  " str r1, [r0] \n"
698  " bx r14 "
699  );
700 }
Here is the caller graph for this function:

Variable Documentation

◆ uxCriticalNesting

UBaseType_t uxCriticalNesting = 0xaaaaaaaa
static
configCPU_CLOCK_HZ
#define configCPU_CLOCK_HZ
Definition: FreeRTOSConfig.h:108
configASSERT
#define configASSERT(x)
Definition: FreeRTOSConfig.h:162
portNVIC_SYSTICK_INT_BIT
#define portNVIC_SYSTICK_INT_BIT
Definition: port.c:98
portCORTEX_M7_r0p0_ID
#define portCORTEX_M7_r0p0_ID
Definition: port.c:108
portPRIGROUP_SHIFT
#define portPRIGROUP_SHIFT
Definition: port.c:121
portCORTEX_M7_r0p1_ID
#define portCORTEX_M7_r0p1_ID
Definition: port.c:107
portNVIC_PENDSV_PRI
#define portNVIC_PENDSV_PRI
Definition: port.c:110
prvTaskExitError
static void prvTaskExitError(void)
Definition: port.c:259
portNVIC_SYSTICK_PRI
#define portNVIC_SYSTICK_PRI
Definition: port.c:111
portFPCCR
#define portFPCCR
Definition: port.c:127
portNVIC_SYSTICK_LOAD_REG
#define portNVIC_SYSTICK_LOAD_REG
Definition: port.c:94
portCPUID
#define portCPUID
Definition: port.c:106
portNVIC_SYSTICK_ENABLE_BIT
#define portNVIC_SYSTICK_ENABLE_BIT
Definition: port.c:99
pdFALSE
#define pdFALSE
Definition: projdefs.h:86
portDISABLE_INTERRUPTS
#define portDISABLE_INTERRUPTS()
Definition: portmacro.h:143
portNVIC_PENDSVSET_BIT
#define portNVIC_PENDSVSET_BIT
Definition: portmacro.h:133
portMAX_8_BIT_VALUE
#define portMAX_8_BIT_VALUE
Definition: port.c:117
StackType_t
portSTACK_TYPE StackType_t
Definition: portmacro.h:97
portTASK_RETURN_ADDRESS
#define portTASK_RETURN_ADDRESS
Definition: port.c:152
xTaskIncrementTick
PRIVILEGED_FUNCTION BaseType_t xTaskIncrementTick(void)
Definition: tasks.c:2499
configSYSTICK_CLOCK_HZ
#define configSYSTICK_CLOCK_HZ
Definition: port.c:83
configMAX_SYSCALL_INTERRUPT_PRIORITY
#define configMAX_SYSCALL_INTERRUPT_PRIORITY
Definition: FreeRTOSConfig.h:157
uxCriticalNesting
static UBaseType_t uxCriticalNesting
Definition: port.c:157
uint8_t
const uint8_t[]
Definition: 404_html.c:3
portMISSED_COUNTS_FACTOR
#define portMISSED_COUNTS_FACTOR
Definition: port.c:144
portVECTACTIVE_MASK
#define portVECTACTIVE_MASK
Definition: port.c:124
portNVIC_SYSPRI2_REG
#define portNVIC_SYSPRI2_REG
Definition: port.c:96
portNVIC_SYSTICK_CLK_BIT
#define portNVIC_SYSTICK_CLK_BIT
Definition: port.c:85
portENABLE_INTERRUPTS
#define portENABLE_INTERRUPTS()
Definition: portmacro.h:144
portINITIAL_XPSR
#define portINITIAL_XPSR
Definition: port.c:131
portTOP_BIT_OF_BYTE
#define portTOP_BIT_OF_BYTE
Definition: port.c:118
vPortSetupTimerInterrupt
void vPortSetupTimerInterrupt(void)
portINITIAL_EXEC_RETURN
#define portINITIAL_EXEC_RETURN
Definition: port.c:132
portFIRST_USER_INTERRUPT_NUMBER
#define portFIRST_USER_INTERRUPT_NUMBER
Definition: port.c:114
configTICK_RATE_HZ
#define configTICK_RATE_HZ
Definition: FreeRTOSConfig.h:109
portMAX_24_BIT_NUMBER
#define portMAX_24_BIT_NUMBER
Definition: port.c:135
prvPortStartFirstTask
static void prvPortStartFirstTask(void)
Definition: port.c:292
portMAX_PRIGROUP_BITS
#define portMAX_PRIGROUP_BITS
Definition: port.c:119
portNVIC_IP_REGISTERS_OFFSET_16
#define portNVIC_IP_REGISTERS_OFFSET_16
Definition: port.c:115
portNVIC_INT_CTRL_REG
#define portNVIC_INT_CTRL_REG
Definition: portmacro.h:132
portASPEN_AND_LSPEN_BITS
#define portASPEN_AND_LSPEN_BITS
Definition: port.c:128
vPortEnableVFP
static void vPortEnableVFP(void)
Definition: port.c:689
portNVIC_SYSTICK_CTRL_REG
#define portNVIC_SYSTICK_CTRL_REG
Definition: port.c:93
portPRIORITY_GROUP_MASK
#define portPRIORITY_GROUP_MASK
Definition: port.c:120
portSTART_ADDRESS_MASK
#define portSTART_ADDRESS_MASK
Definition: port.c:139
const
#define const
Definition: zconf.h:230