X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_notask.c;h=c87bbbbbe21cbf32ab217b2856f105a299af379f;hb=d225adc3af9e5726d436cbbdbf8dcc5837e50804;hp=a5bdc8a7c65e5d81dbc6e0ad8b7bcf9ff54261d8;hpb=0686a7b8aec524d81bda4c572549a3a068ce0eed;p=fw%2Faltos diff --git a/src/kernel/ao_notask.c b/src/kernel/ao_notask.c index a5bdc8a7..c87bbbbb 100644 --- a/src/kernel/ao_notask.c +++ b/src/kernel/ao_notask.c @@ -41,17 +41,20 @@ ao_sleep(void *wchan) #if HAS_AO_DELAY void -ao_delay(uint16_t ticks) +ao_delay_until(AO_TICK_TYPE target) { - AO_TICK_TYPE target; - - if (!ticks) - ticks = 1; - target = ao_tick_count + ticks; - do { - ao_sleep(&ao_time); - } while ((int16_t) (target - ao_tick_count) > 0); + ao_arch_block_interrupts(); + while ((AO_TICK_SIGNED) (target - ao_tick_count) > 0) + ao_sleep((void *) &ao_tick_count); + ao_arch_release_interrupts(); } + +void +ao_delay(AO_TICK_TYPE ticks) +{ + ao_delay_until(ao_time() + ticks); +} + #endif void