X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_notask.c;h=c87bbbbbe21cbf32ab217b2856f105a299af379f;hp=7207353af5444891b7982207c24d72fe5c3ddabc;hb=HEAD;hpb=db352bd0723e8d640bb034bc14e5ad193f0afe1d diff --git a/src/kernel/ao_notask.c b/src/kernel/ao_notask.c index 7207353a..c87bbbbb 100644 --- a/src/kernel/ao_notask.c +++ b/src/kernel/ao_notask.c @@ -21,7 +21,7 @@ static volatile void *ao_wchan; uint8_t -ao_sleep(__xdata void *wchan) +ao_sleep(void *wchan) { #if 1 ao_wchan = wchan; @@ -41,21 +41,24 @@ ao_sleep(__xdata 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 -ao_wakeup(__xdata void *wchan) +ao_wakeup(void *wchan) { (void) wchan; ao_wchan = 0;