/** * @brief Interrupt simulation. */ void ChkIntSources(void) { LARGE_INTEGER n; #if HAL_USE_SERIAL if (sd_lld_interrupt_pending()) { dbg_check_lock(); if (chSchIsPreemptionRequired()) chSchDoReschedule(); dbg_check_unlock(); return; } #endif /* Interrupt Timer simulation (10ms interval).*/ QueryPerformanceCounter(&n); if (n.QuadPart > nextcnt.QuadPart) { nextcnt.QuadPart += slice.QuadPart; CH_IRQ_PROLOGUE(); chSysLockFromIsr(); chSysTimerHandlerI(); chSysUnlockFromIsr(); CH_IRQ_EPILOGUE(); dbg_check_lock(); if (chSchIsPreemptionRequired()) chSchDoReschedule(); dbg_check_unlock(); } else { /* Avoid CPU spinning */ Sleep(1); } }
void chSchRescheduleS(void) { chDbgCheckClassS(); if (chSchIsRescRequiredI()) chSchDoReschedule(); }