X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_task.c;h=1ecdd7dd1261246dc18eeb1483262274c2a76cb9;hp=bafb49439d4441022be1b9159947f30a9f8d7bff;hb=f4c812bef76a2cd95f675cb27ea89059561ceec7;hpb=1445725b983134d5a967dee88ef997bf15d4a422 diff --git a/src/kernel/ao_task.c b/src/kernel/ao_task.c index bafb4943..1ecdd7dd 100644 --- a/src/kernel/ao_task.c +++ b/src/kernel/ao_task.c @@ -450,7 +450,7 @@ ao_wakeup(__xdata void *wchan) __reentrant ao_check_stack(); } -void +static void ao_alarm(uint16_t delay) { #if HAS_TASK_QUEUE @@ -468,7 +468,7 @@ ao_alarm(uint16_t delay) #endif } -void +static void ao_clear_alarm(void) { #if HAS_TASK_QUEUE @@ -483,14 +483,24 @@ ao_clear_alarm(void) #endif } +uint8_t +ao_sleep_for(__xdata void *wchan, uint16_t timeout) +{ + uint8_t ret; + if (timeout) + ao_alarm(timeout); + ret = ao_sleep(wchan); + if (timeout) + ao_clear_alarm(); + return ret; +} + static __xdata uint8_t ao_forever; void ao_delay(uint16_t ticks) { - ao_alarm(ticks); - ao_sleep(&ao_forever); - ao_clear_alarm(); + ao_sleep_for(&ao_forever, ticks); } void