diff --git a/hal/src/main/native/sim/MockHooks.cpp b/hal/src/main/native/sim/MockHooks.cpp index fe29fe6540..8fe387f4de 100644 --- a/hal/src/main/native/sim/MockHooks.cpp +++ b/hal/src/main/native/sim/MockHooks.cpp @@ -5,6 +5,7 @@ /* the project. */ /*----------------------------------------------------------------------------*/ +#include #include #include #include @@ -14,6 +15,7 @@ #include "MockHooksInternal.h" #include "NotifierInternal.h" +#include "hal/simulation/NotifierData.h" static std::atomic programStarted{false}; @@ -93,8 +95,18 @@ HAL_Bool HALSIM_IsTimingPaused(void) { return IsTimingPaused(); } void HALSIM_StepTiming(uint64_t delta) { WaitNotifiers(); - StepTiming(delta); - WakeupWaitNotifiers(); + + while (delta > 0) { + int32_t status = 0; + uint64_t curTime = HAL_GetFPGATime(&status); + uint64_t nextTimeout = HALSIM_GetNextNotifierTimeout(); + uint64_t step = std::min(delta, nextTimeout - curTime); + + StepTiming(step); + delta -= step; + + WakeupWaitNotifiers(); + } } void HALSIM_StepTimingAsync(uint64_t delta) {