X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_notask.c;h=8c5743fdecd0a0a1f7ae62c528e32d27c98a138b;hb=48bc180211f226b0406aae28a85d5e5ee77455a2;hp=6f967e6d2201db4d520f5410c33f7a038f00491d;hpb=24167015705ae831692b95735968b04a876f935e;p=fw%2Faltos diff --git a/src/kernel/ao_notask.c b/src/kernel/ao_notask.c index 6f967e6d..8c5743fd 100644 --- a/src/kernel/ao_notask.c +++ b/src/kernel/ao_notask.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,7 +21,7 @@ static volatile void *ao_wchan; uint8_t -ao_sleep(__xdata void *wchan) +ao_sleep(void *wchan) { #if 1 ao_wchan = wchan; @@ -38,8 +39,26 @@ ao_sleep(__xdata void *wchan) return 0; } +#if HAS_AO_DELAY void -ao_wakeup(__xdata void *wchan) +ao_delay_until(AO_TICK_TYPE target) +{ + ao_arch_block_interrupts(); + while ((int16_t) (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(void *wchan) { (void) wchan; ao_wchan = 0;