Being used to Ada’s delay until
construct (delay until an absolute time; in the language since 1983), I took some time to appreciate how vTaskDelayUntil()
was supposed to work.
To get an undrifting delay, we would say e.g.
loop
-- do stuff here
delay until Next_Time;
Next_Time := Next_Time + Period;
end loop;
which is I think what Joel is suggesting.