void rt_systick (void) { /* Check for system clock update, suspend running task. */ P_TCB next; os_tsk.run->state = READY; rt_put_rdy_first (os_tsk.run); /* Check Round Robin timeout. */ rt_chk_robin (); /* Update delays. */ os_time++; rt_dec_dly (); /* Check the user timers. */ #ifdef __CMSIS_RTOS sysTimerTick(); #else rt_tmr_tick (); #endif /* Switch back to highest ready task */ next = rt_get_first (&os_rdy); rt_switch_req (next); }
void rt_systick (void) { if(NVIC_Pending(SYS_TICK_IRQn)){ rt_pop_req(); NVIC_UnpendIRQ(SYS_TICK_IRQn); SYS_TICK_TIMER->IR = 0xF; // clear timer interrupt return; } /* Check for system clock update, suspend running task. */ P_TCB next; os_tsk.run->state = READY; rt_put_rdy_first (os_tsk.run); /* Check Round Robin timeout. */ rt_chk_robin (); /* Update delays. */ os_time++; rt_dec_dly (); /* Check the user timers. */ #ifdef __CMSIS_RTOS sysTimerTick(); #else rt_tmr_tick (); #endif /* Switch back to highest ready task */ next = rt_get_first (&os_rdy); rt_switch_req (next); SYS_TICK_TIMER->IR = 0xF; // clear timer interrupt }