altos: Add ao_delay_until to ao_notask
authorKeith Packard <keithp@keithp.com>
Tue, 23 Jun 2020 00:42:03 +0000 (17:42 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 8 Aug 2020 03:30:11 +0000 (20:30 -0700)
Used on micropeak

Signed-off-by: Keith Packard <keithp@keithp.com>
src/kernel/ao_notask.c
src/kernel/ao_notask.h

index e973c7ae1723e8fa8811543e092590694622bf3f..8c5743fdecd0a0a1f7ae62c528e32d27c98a138b 100644 (file)
@@ -40,18 +40,21 @@ ao_sleep(void *wchan)
 }
 
 #if HAS_AO_DELAY
+void
+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_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_delay_until(ao_time() + ticks);
 }
+
 #endif
 
 void
index 6ad15a56cf14eb49bdd1edc795ce0333e2c8573e..f698a4ee2426014985a32e45e526afbf39556980 100644 (file)
@@ -19,6 +19,9 @@
 #ifndef _AO_NOTASK_H_
 #define _AO_NOTASK_H_
 
+void
+ao_delay_until(AO_TICK_TYPE target);
+
 uint8_t
 ao_sleep(void *wchan);