summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-08-28 18:03:52 -0700
committerKeith Packard <keithp@keithp.com>2012-08-28 23:00:22 -0700
commit31b42b99edbb976534ac432c07e218f13d1f5f9b (patch)
tree738feb9a042a1dad0c04e36b610a0e1099050c40
parentac5d053e6d766d243b7a425ae19779810c350125 (diff)
altos: Fix ao_delay function and move from per-chip code to ao_task.c
ao_delay hasn't been chip-specific for a long time, and it had a bug in not calling ao_clear_alarm. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/avr/ao_timer.c9
-rw-r--r--src/cc1111/ao_timer.c10
-rw-r--r--src/core/ao_task.c11
-rw-r--r--src/stm/ao_timer.c9
4 files changed, 11 insertions, 28 deletions
diff --git a/src/avr/ao_timer.c b/src/avr/ao_timer.c
index cd81b163..d2ea2be7 100644
--- a/src/avr/ao_timer.c
+++ b/src/avr/ao_timer.c
@@ -28,15 +28,6 @@ uint16_t ao_time(void)
return v;
}
-static __xdata uint8_t ao_forever;
-
-void
-ao_delay(uint16_t ticks)
-{
- ao_alarm(ticks);
- ao_sleep(&ao_forever);
-}
-
#define T1_CLOCK_DIVISOR 8 /* 24e6/8 = 3e6 */
#define T1_SAMPLE_TIME 30000 /* 3e6/30000 = 100 */
diff --git a/src/cc1111/ao_timer.c b/src/cc1111/ao_timer.c
index 602f98c8..a64b5aba 100644
--- a/src/cc1111/ao_timer.c
+++ b/src/cc1111/ao_timer.c
@@ -24,16 +24,6 @@ uint16_t ao_time(void) __critical
return ao_tick_count;
}
-static __xdata uint8_t ao_forever;
-
-void
-ao_delay(uint16_t ticks)
-{
- ao_alarm(ticks);
- ao_sleep(&ao_forever);
- ao_clear_alarm();
-}
-
#define T1_CLOCK_DIVISOR 8 /* 24e6/8 = 3e6 */
#define T1_SAMPLE_TIME 30000 /* 3e6/30000 = 100 */
diff --git a/src/core/ao_task.c b/src/core/ao_task.c
index 4593bd79..65654731 100644
--- a/src/core/ao_task.c
+++ b/src/core/ao_task.c
@@ -125,6 +125,7 @@ ao_sleep(__xdata void *wchan)
ao_yield();
if (ao_cur_task->wchan) {
ao_cur_task->wchan = NULL;
+ ao_cur_task->alarm = 0;
return 1;
}
return 0;
@@ -157,6 +158,16 @@ ao_clear_alarm(void)
ao_cur_task->alarm = 0;
}
+static __xdata uint8_t ao_forever;
+
+void
+ao_delay(uint16_t ticks)
+{
+ ao_alarm(ticks);
+ ao_sleep(&ao_forever);
+ ao_clear_alarm();
+}
+
void
ao_exit(void)
{
diff --git a/src/stm/ao_timer.c b/src/stm/ao_timer.c
index 78228e65..f561e6b5 100644
--- a/src/stm/ao_timer.c
+++ b/src/stm/ao_timer.c
@@ -28,15 +28,6 @@ uint16_t ao_time(void)
return v;
}
-static __xdata uint8_t ao_forever;
-
-void
-ao_delay(uint16_t ticks)
-{
- ao_alarm(ticks);
- ao_sleep(&ao_forever);
-}
-
#if AO_DATA_ALL
volatile __data uint8_t ao_data_interval = 1;
volatile __data uint8_t ao_data_count;