/** * @brief Handles time ticks for round robin preemption and timer increments. * @details Decrements the remaining time quantum of the running thread * and preempts it when the quantum is used up. Increments system * time and manages the timers. * @note The frequency of the timer determines the system tick granularity * and, together with the @p CH_CFG_TIME_QUANTUM macro, the round robin * interval. * * @iclass */ void chSysTimerHandlerI(void) { chDbgCheckClassI(); #if CH_CFG_TIME_QUANTUM > 0 /* Running thread has not used up quantum yet? */ if (currp->preempt > (tslices_t)0) { /* Decrement remaining quantum.*/ currp->preempt--; } #endif #if CH_DBG_THREADS_PROFILING == TRUE currp->time++; #endif chVTDoTickI(); CH_CFG_SYSTEM_TICK_HOOK(); }
/** * @brief Handles time ticks for round robin preemption and timer increments. * @details Decrements the remaining time quantum of the running thread * and preempts it when the quantum is used up. Increments system * time and manages the timers. * @note The frequency of the timer determines the system tick granularity * and, together with the @p CH_CFG_TIME_QUANTUM macro, the round robin * interval. * * @iclass */ void chSysTimerHandlerI(void) { chDbgCheckClassI(); #if CH_CFG_TIME_QUANTUM > 0 /* Running thread has not used up quantum yet? */ if (currp->p_preempt > 0) /* Decrement remaining quantum.*/ currp->p_preempt--; #endif #if CH_DBG_THREADS_PROFILING currp->p_time++; #endif chVTDoTickI(); #if defined(CH_CFG_SYSTEM_TICK_HOOK) CH_CFG_SYSTEM_TICK_HOOK(); #endif }