/* The preemptive scheduler is defined as "naked" as the full context is saved on entry as part of the context switch. */ __attribute__((__naked__)) static void vTick( void ) { /* Save the context of the interrupted task. */ portSAVE_CONTEXT_OS_INT(); #if( configTICK_USE_TC==1 ) /* Clear the interrupt flag. */ prvClearTcInt(); #else /* Clear the interrupt flag. */ prvClearCcInt(); #endif /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS calls in a critical section . */ portENTER_CRITICAL(); vTaskIncrementTick(); portEXIT_CRITICAL(); /* Restore the context of the "elected task". */ portRESTORE_CONTEXT_OS_INT(); }
/* The preemptive scheduler is defined as "naked" as the full context is saved on entry as part of the context switch. */ __attribute__((__naked__)) static void vTick( void ) { /* Save the context of the interrupted task. */ portSAVE_CONTEXT_OS_INT(); #if( configTICK_USE_TC==1 ) /* Clear the interrupt flag. */ prvClearTcInt(); #else /* Schedule the COUNT&COMPARE match interrupt in (configCPU_CLOCK_HZ/configTICK_RATE_HZ) clock cycles from now. */ prvScheduleNextTick(); #endif /* Because FreeRTOS is not supposed to run with nested interrupts, put all OS calls in a critical section . */ portENTER_CRITICAL(); xTaskIncrementTick(); portEXIT_CRITICAL(); /* Restore the context of the "elected task". */ portRESTORE_CONTEXT_OS_INT(); }