altos: Move ao_notask to core
authorKeith Packard <keithp@keithp.com>
Tue, 23 Apr 2013 01:24:48 +0000 (20:24 -0500)
committerKeith Packard <keithp@keithp.com>
Wed, 8 May 2013 03:16:53 +0000 (20:16 -0700)
The STM flash loader wants to be taskless too, share this very simple
implementation of sleep/wakeup.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/attiny/ao_arch.h
src/core/ao.h
src/core/ao_notask.c [new file with mode: 0644]
src/core/ao_notask.h [new file with mode: 0644]
src/micropeak/ao_notask.c [deleted file]

index 52bed981a9eaaa202080b09d2da48813218b393d..8140dd30b2541da6a885b39e6b3e64e0d7a41855 100644 (file)
@@ -55,7 +55,7 @@
 #define putchar(c)     ao_putchar(c)
 #define getchar                ao_getchar
 
-#define ao_arch_cpu_idle() do {                        \
+#define ao_arch_wait_interrupt() do {          \
                sleep_enable();                 \
                sei();                          \
                sleep_cpu();                    \
index 6bcb3664925d5262871abaae9670ef6d397a0cd1..0ad3e4aa6504b68774fdbd7b487a59385ff9a4f2 100644 (file)
@@ -45,6 +45,8 @@
 
 #if HAS_TASK
 #include <ao_task.h>
+#else
+#include <ao_notask.h>
 #endif
 
 /*
diff --git a/src/core/ao_notask.c b/src/core/ao_notask.c
new file mode 100644 (file)
index 0000000..a41712d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <ao.h>
+
+static volatile void *ao_wchan;
+
+uint8_t
+ao_sleep(__xdata void *wchan)
+{
+#if 1
+       ao_wchan = wchan;
+       ao_arch_wait_interrupt();
+#else
+       uint8_t sreg;
+
+       ao_wchan = wchan;
+       asm("in %0,__SREG__" : "=&r" (sreg));
+       sei();
+       while (ao_wchan)
+               ao_arch_cpu_idle();
+       asm("out __SREG__,%0" : : "r" (sreg));
+#endif
+       return 0;
+}
+
+void
+ao_wakeup(__xdata void *wchan)
+{
+       ao_wchan = 0;
+}
diff --git a/src/core/ao_notask.h b/src/core/ao_notask.h
new file mode 100644 (file)
index 0000000..6b6b5bb
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#ifndef _AO_NOTASK_H_
+#define _AO_NOTASK_H_
+
+uint8_t
+ao_sleep(__xdata void *wchan);
+
+void
+ao_wakeup(__xdata void *wchan);
+
+#endif /* _AO_NOTASK_H_ */
diff --git a/src/micropeak/ao_notask.c b/src/micropeak/ao_notask.c
deleted file mode 100644 (file)
index 0aef9cf..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright © 2012 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#include <ao.h>
-
-static volatile void *ao_wchan;
-
-uint8_t
-ao_sleep(__xdata void *wchan)
-{
-#if 1
-       ao_wchan = wchan;
-       ao_arch_cpu_idle();
-#else
-       uint8_t sreg;
-
-       ao_wchan = wchan;
-       asm("in %0,__SREG__" : "=&r" (sreg));
-       sei();
-       while (ao_wchan)
-               ao_arch_cpu_idle();
-       asm("out __SREG__,%0" : : "r" (sreg));
-#endif
-       return 0;
-}
-
-void
-ao_wakeup(__xdata void *wchan)
-{
-       ao_wchan = 0;
-}