altos: Remove support for !HAS_TASK_QUEUE
authorKeith Packard <keithp@keithp.com>
Thu, 6 Aug 2020 18:05:03 +0000 (11:05 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 8 Aug 2020 03:30:11 +0000 (20:30 -0700)
This uses a bit more memory, but the amount can be controlled by
setting the size of the sleep hash table, which makes this fit on even
the smaller devices like the early EasyMini boards.

Signed-off-by: Keith Packard <keithp@keithp.com>
34 files changed:
src/cortexelf-v1/ao_pins.h
src/easymega-v1.0/ao_pins.h
src/easymega-v2.0/ao_pins.h
src/easymega-v3.0/ao_pins.h
src/easymini-v1.0/ao_pins.h
src/easytimer-v1/ao_pins.h
src/fox1ihu/ao_pins.h
src/kernel/ao_task.c
src/kernel/ao_task.h
src/lpc/ao_timer_lpc.c
src/mpusb-v3.0/ao_pins.h
src/product/ao_flash_pins.h
src/stm-flash/ao_pins.h
src/stm-vga/ao_pins.h
src/stm/ao_timer.c
src/stm32f4/ao_arch.h
src/stm32f4/ao_timer.c
src/stm32l0/ao_arch.h
src/stm32l0/ao_timer.c
src/stmf0/ao_timer.c
src/teleballoon-v2.0/ao_pins.h
src/telebt-v3.0/ao_pins.h
src/telebt-v4.0/ao_pins.h
src/teledongle-v3.0/ao_pins.h
src/telegps-v0.1/ao_pins.h
src/telemega-v0.1/ao_pins.h
src/telemega-v1.0/ao_pins.h
src/telemega-v2.0/ao_pins.h
src/telemega-v3.0/ao_pins.h
src/telemega-v4.0/ao_pins.h
src/telemetrum-v2.0/ao_pins.h
src/telemetrum-v3.0/ao_pins.h
src/tmgps-v2.0/ao_pins.h
src/vidtime/ao_pins.h

index c2bbf2d2f2a1b4dd00d9ba766e450a4f7a95f275..2a94d968a3ea4d8f0a4177f1ca4ed6aa4413da3d 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index bfa777c66401466a9348abd6f7a2c1da4687bc84..d16843d62cf345903eca1516961bc8b4ed25c058 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index d7f903344b0e186d19012061d3b70ac75d2469b1..a3d04da52d008a5746fafd07e8ddffa361c118a2 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 16MHz High speed external crystal */
 #define AO_HSE                 16000000
index 31ebfa4588a320f71b83dd03bcadc3b25aca63d2..863909d553342c140f56f823835893cbbb8ccdb8 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 16MHz High speed external crystal */
 #define AO_HSE                 16000000
index 201b913edd1e981532b7513d0f8eb72ec24e26c8..ef8cba2d43307a85af5602c19cb85602e73f8461 100644 (file)
@@ -19,7 +19,9 @@
 #define HAS_BEEP               1
 #define HAS_BATTERY_REPORT     1
 
-#define AO_STACK_SIZE  376
+#define AO_STACK_SIZE          360
+#define SLEEP_HASH_SIZE                3
+#define AO_NUM_TASKS           6
 
 #define IS_FLASH_LOADER        0
 
@@ -93,6 +95,7 @@
 #define USE_INTERNAL_FLASH     0
 #define HAS_IGNITE             1
 #define HAS_IGNITE_REPORT      1
+#define SLEEP_HASH_SIZE                3
 
 #define AO_DATA_RING           16
 
index 3ceb49f3c73a79f17e8a223dfe250f71d0ed2ed2..1169a2830be8839e7017f8dfc137364c5c1ca561 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 16MHz High speed external crystal */
 #define AO_HSE                 16000000
index b5dd7283748084cb3dc0e7788bcc447415aa49b1..34fdefe66484ae87d281b95ed2e24b9e90b49273 100644 (file)
@@ -18,7 +18,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index 38aefbec1ea3d91bd3bf2d4a4e0bc5664f8b5d95..dd278bde064740f3ed0ac1a6ef11d90ccb85ab7c 100644 (file)
 
 #define DEBUG  0
 
-#define AO_NO_TASK_INDEX       0xff
-
 struct ao_task * ao_tasks[AO_NUM_TASKS];
 uint8_t ao_num_tasks;
 struct ao_task *ao_cur_task;
 
-#if !HAS_TASK_QUEUE
-static uint8_t ao_cur_task_index;
-#endif
-
 #ifdef ao_arch_task_globals
 ao_arch_task_globals
 #endif
@@ -62,16 +56,16 @@ static inline void ao_check_stack(void) {
 #define ao_task_irq_check()
 #endif
 
-#if HAS_TASK_QUEUE
-
+#ifndef SLEEP_HASH_SIZE
 #define SLEEP_HASH_SIZE        17
+#endif
 
 static struct ao_list  run_queue;
 static struct ao_list  alarm_queue;
 static struct ao_list  ao_sleep_queue[SLEEP_HASH_SIZE];
 
 static void
-ao_task_to_run_queue(struct ao_task *task)
+_ao_task_to_run_queue(struct ao_task *task)
 {
        ao_task_irq_check();
        ao_list_del(&task->queue);
@@ -85,7 +79,7 @@ ao_task_sleep_queue(void *wchan)
 }
 
 static void
-ao_task_to_sleep_queue(struct ao_task *task, void *wchan)
+_ao_task_to_sleep_queue(struct ao_task *task, void *wchan)
 {
        ao_task_irq_check();
        ao_list_del(&task->queue);
@@ -129,7 +123,7 @@ ao_task_validate_alarm_queue(void)
 AO_TICK_TYPE   ao_task_alarm_tick;
 
 static void
-ao_task_to_alarm_queue(struct ao_task *task)
+_ao_task_to_alarm_queue(struct ao_task *task)
 {
        struct ao_task  *alarm;
        ao_task_irq_check();
@@ -147,7 +141,7 @@ ao_task_to_alarm_queue(struct ao_task *task)
 }
 
 static void
-ao_task_from_alarm_queue(struct ao_task *task)
+_ao_task_from_alarm_queue(struct ao_task *task)
 {
        ao_task_irq_check();
        ao_list_del(&task->alarm_queue);
@@ -174,17 +168,17 @@ ao_task_exit_queue(struct ao_task *task)
 }
 
 void
-ao_task_check_alarm(AO_TICK_TYPE tick)
+ao_task_alarm(AO_TICK_TYPE tick)
 {
        struct ao_task  *alarm, *next;
 
        ao_arch_critical(
                ao_list_for_each_entry_safe(alarm, next, &alarm_queue, struct ao_task, alarm_queue) {
-                       if ((int16_t) (tick - alarm->alarm) < 0)
+                       if ((AO_TICK_SIGNED) (tick - alarm->alarm) < 0)
                                break;
                        alarm->alarm = 0;
-                       ao_task_from_alarm_queue(alarm);
-                       ao_task_to_run_queue(alarm);
+                       _ao_task_from_alarm_queue(alarm);
+                       _ao_task_to_run_queue(alarm);
                });
 }
 
@@ -288,8 +282,6 @@ ao_task_validate(void)
 }
 #endif /* DEBUG */
 
-#endif /* HAS_TASK_QUEUE */
-
 static inline void *
 ao_stack_top(struct ao_task *task)
 {
@@ -331,11 +323,9 @@ ao_add_task(struct ao_task * task, void (*task_func)(void), const char *name)
        _init_tls(sp);
 #endif
        ao_arch_init_stack(task, sp, task_func);
+       ao_task_init_queue(task);
        ao_arch_critical(
-#if HAS_TASK_QUEUE
-               ao_task_init_queue(task);
-               ao_task_to_run_queue(task);
-#endif
+               _ao_task_to_run_queue(task);
                ao_tasks[ao_num_tasks] = task;
                ao_num_tasks++;
                );
@@ -343,20 +333,11 @@ ao_add_task(struct ao_task * task, void (*task_func)(void), const char *name)
 
 uint8_t        ao_task_minimize_latency;
 
-/* Task switching function. This must not use any stack variables */
+/* Task switching function. */
 void
-ao_yield(void) ao_arch_naked_define
+ao_yield(void)
 {
-       ao_arch_save_regs();
-
-#if HAS_TASK_QUEUE
-       if (ao_cur_task == NULL)
-               ao_cur_task = ao_tasks[ao_num_tasks-1];
-#else
-       if (ao_cur_task_index == AO_NO_TASK_INDEX)
-               ao_cur_task_index = ao_num_tasks-1;
-#endif
-       else
+       if (ao_cur_task)
        {
 #if HAS_SAMPLE_PROFILE
                AO_TICK_TYPE    tick = ao_sample_profile_timer_value();
@@ -365,16 +346,12 @@ ao_yield(void) ao_arch_naked_define
                        ao_cur_task->max_run = run;
                ++ao_cur_task->yields;
 #endif
+               ao_arch_save_regs();
                ao_arch_save_stack();
        }
 
        ao_arch_isr_stack();
-#if !HAS_TASK_QUEUE
-       if (ao_task_minimize_latency)
-               ao_arch_release_interrupts();
-       else
-#endif
-               ao_arch_block_interrupts();
+       ao_arch_block_interrupts();
 
 #if AO_CHECK_STACK
        in_yield = 1;
@@ -382,12 +359,11 @@ ao_yield(void) ao_arch_naked_define
        /* Find a task to run. If there isn't any runnable task,
         * this loop will run forever, which is just fine
         */
-#if HAS_TASK_QUEUE
        /* If the current task is running, move it to the
         * end of the queue to allow other tasks a chance
         */
-       if (ao_cur_task->wchan == NULL)
-               ao_task_to_run_queue(ao_cur_task);
+       if (ao_cur_task && ao_cur_task->wchan == NULL)
+               _ao_task_to_run_queue(ao_cur_task);
        for (;;) {
                ao_arch_memory_barrier();
                if (!ao_list_is_empty(&run_queue))
@@ -400,31 +376,6 @@ ao_yield(void) ao_arch_naked_define
                        ao_arch_wait_interrupt();
        }
        ao_cur_task = ao_list_first_entry(&run_queue, struct ao_task, queue);
-#else
-       {
-               uint8_t ao_last_task_index = ao_cur_task_index;
-               for (;;) {
-                       ++ao_cur_task_index;
-                       if (ao_cur_task_index == ao_num_tasks)
-                               ao_cur_task_index = 0;
-
-                       ao_cur_task = ao_tasks[ao_cur_task_index];
-
-                       /* Check for ready task */
-                       if (ao_cur_task->wchan == NULL)
-                               break;
-
-                       /* Check if the alarm is set for a time which has passed */
-                       if (ao_cur_task->alarm &&
-                           (int16_t) (ao_time() - ao_cur_task->alarm) >= 0)
-                               break;
-
-                       /* Wait for interrupts when there's nothing ready */
-                       if (ao_cur_task_index == ao_last_task_index && !ao_task_minimize_latency)
-                               ao_arch_wait_interrupt();
-               }
-       }
-#endif
 #if HAS_SAMPLE_PROFILE
        ao_cur_task->start = ao_sample_profile_timer_value();
 #endif
@@ -443,15 +394,10 @@ ao_yield(void) ao_arch_naked_define
 uint8_t
 ao_sleep(void *wchan)
 {
-#if HAS_TASK_QUEUE
-       uint32_t flags;
-       flags = ao_arch_irqsave();
-#endif
-       ao_cur_task->wchan = wchan;
-#if HAS_TASK_QUEUE
-       ao_task_to_sleep_queue(ao_cur_task, wchan);
-       ao_arch_irqrestore(flags);
-#endif
+       ao_arch_critical(
+               ao_cur_task->wchan = wchan;
+               _ao_task_to_sleep_queue(ao_cur_task, wchan);
+               );
        ao_yield();
        if (ao_cur_task->wchan) {
                ao_cur_task->wchan = NULL;
@@ -465,7 +411,6 @@ void
 ao_wakeup(void *wchan) 
 {
        ao_validate_cur_stack();
-#if HAS_TASK_QUEUE
        struct ao_task  *sleep, *next;
        struct ao_list  *sleep_queue;
        uint32_t        flags;
@@ -477,18 +422,10 @@ ao_wakeup(void *wchan)
        ao_list_for_each_entry_safe(sleep, next, sleep_queue, struct ao_task, queue) {
                if (sleep->wchan == wchan) {
                        sleep->wchan = NULL;
-                       ao_task_to_run_queue(sleep);
+                       _ao_task_to_run_queue(sleep);
                }
        }
        ao_arch_irqrestore(flags);
-#else
-       {
-       uint8_t i;
-       for (i = 0; i < ao_num_tasks; i++)
-               if (ao_tasks[i]->wchan == wchan)
-                       ao_tasks[i]->wchan = NULL;
-       }
-#endif
        ao_check_stack();
 }
 
@@ -497,32 +434,21 @@ ao_sleep_for(void *wchan, AO_TICK_TYPE timeout)
 {
        uint8_t ret;
        if (timeout) {
-#if HAS_TASK_QUEUE
-               uint32_t flags;
-               flags = ao_arch_irqsave();
-#endif
-               /* Make sure we sleep *at least* delay ticks, which means adding
-                * one to account for the fact that we may be close to the next tick
-                */
-               if (!(ao_cur_task->alarm = ao_time() + timeout + 1))
-                       ao_cur_task->alarm = 1;
-#if HAS_TASK_QUEUE
-               ao_task_to_alarm_queue(ao_cur_task);
-               ao_arch_irqrestore(flags);
-#endif
+               ao_arch_critical(
+                       /* Make sure we sleep *at least* delay ticks, which means adding
+                        * one to account for the fact that we may be close to the next tick
+                        */
+                       if (!(ao_cur_task->alarm = ao_time() + timeout + 1))
+                               ao_cur_task->alarm = 1;
+                       _ao_task_to_alarm_queue(ao_cur_task);
+                       );
        }
        ret = ao_sleep(wchan);
        if (timeout) {
-#if HAS_TASK_QUEUE
-               uint32_t flags;
-
-               flags = ao_arch_irqsave();
-#endif
-               ao_cur_task->alarm = 0;
-#if HAS_TASK_QUEUE
-               ao_task_from_alarm_queue(ao_cur_task);
-               ao_arch_irqrestore(flags);
-#endif
+               ao_arch_critical(
+                       ao_cur_task->alarm = 0;
+                       _ao_task_from_alarm_queue(ao_cur_task);
+                       );
        }
        return ret;
 }
@@ -542,21 +468,17 @@ ao_exit(void)
 {
        uint8_t i;
        ao_arch_block_interrupts();
-       ao_num_tasks--;
-#if HAS_TASK_QUEUE
        for (i = 0; i < ao_num_tasks; i++)
                if (ao_tasks[i] == ao_cur_task)
                        break;
        ao_task_exit_queue(ao_cur_task);
-#else
-       i = ao_cur_task_index;
-       ao_cur_task_index = AO_NO_TASK_INDEX;
-#endif
+       /* Remove task from list */
+       ao_num_tasks--;
        for (; i < ao_num_tasks; i++)
                ao_tasks[i] = ao_tasks[i+1];
        ao_cur_task = NULL;
        ao_yield();
-       /* we'll never get back here */
+       __builtin_unreachable();
 }
 
 #if HAS_TASK_INFO
@@ -575,7 +497,7 @@ ao_task_info(void)
                       task->alarm ? (int16_t) (task->alarm - now) : 9999,
                       task->name);
        }
-#if HAS_TASK_QUEUE && DEBUG
+#if DEBUG
        ao_task_validate();
 #endif
 }
@@ -584,9 +506,6 @@ ao_task_info(void)
 void
 ao_start_scheduler(void)
 {
-#if !HAS_TASK_QUEUE
-       ao_cur_task_index = AO_NO_TASK_INDEX;
-#endif
        ao_cur_task = NULL;
 #if HAS_ARCH_START_SCHEDULER
        ao_arch_start_scheduler();
index 7d81c1da547243e4c024fbf35ebcc5ae8633812a..beb4da30e5ad7d799b3780017b805e692c34d656 100644 (file)
@@ -18,9 +18,8 @@
 
 #ifndef _AO_TASK_H_
 #define _AO_TASK_H_
-#if HAS_TASK_QUEUE
+
 #include <ao_list.h>
-#endif
 
 #ifndef HAS_TASK_INFO
 #define HAS_TASK_INFO 1
@@ -46,10 +45,8 @@ struct ao_task {
                uint8_t         *sp8;
        };
        const char *name;               /* task name */
-#if HAS_TASK_QUEUE
        struct ao_list  queue;
        struct ao_list  alarm_queue;
-#endif
        /* Provide both 32-bit and 8-bit stacks */
        union {
                uint32_t stack32[AO_STACK_SIZE>>2];
@@ -67,8 +64,6 @@ struct ao_task {
 #define AO_NUM_TASKS           16      /* maximum number of tasks */
 #endif
 
-#define AO_NO_TASK             0       /* no task id */
-
 extern struct ao_task * ao_tasks[AO_NUM_TASKS];
 extern uint8_t ao_num_tasks;
 extern struct ao_task *ao_cur_task;
@@ -120,16 +115,24 @@ ao_yield(void) ao_arch_naked_declare;
 void
 ao_add_task(struct ao_task * task, void (*start)(void), const char *name);
 
-#if HAS_TASK_QUEUE
 /* Called on timer interrupt to check alarms */
-extern AO_TICK_TYPE    ao_task_alarm_tick;
+extern AO_TICK_TYPE            ao_task_alarm_tick;
+extern volatile AO_TICK_TYPE   ao_tick_count;
+
 void
-ao_task_check_alarm(AO_TICK_TYPE tick);
+ao_task_alarm(AO_TICK_TYPE tick);
+
+static inline void
+ao_task_check_alarm(void) {
+#if HAS_TASK
+       if ((AO_TICK_SIGNED) (ao_tick_count - ao_task_alarm_tick) >= 0)
+               ao_task_alarm(ao_tick_count);
 #endif
+}
 
 /* Terminate the current task */
 void
-ao_exit(void);
+ao_exit(void) __attribute__ ((noreturn));
 
 /* Dump task info to console */
 void
@@ -139,11 +142,7 @@ ao_task_info(void);
 void
 ao_start_scheduler(void) __attribute__((noreturn));
 
-#if HAS_TASK_QUEUE
 void
 ao_task_init(void);
-#else
-#define ao_task_init()
-#endif
 
 #endif
index 62b16318107f74fc354783ab8520390ac54d524b..a334ee0d286f8b78fa57ed5a80720545d52e795c 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #include <ao.h>
+#include <ao_task.h>
 
 #define AO_SYSTICK     (AO_LPC_SYSCLK / 2)
 
@@ -53,10 +54,7 @@ void lpc_systick_isr(void)
 {
        if (lpc_systick.csr & (1 << LPC_SYSTICK_CSR_COUNTFLAG)) {
                ++ao_tick_count;
-#if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
-#endif
+               ao_task_check_alarm();
 #if AO_DATA_ALL
                if (++ao_data_count == ao_data_interval) {
                        ao_data_count = 0;
index 3e79aad3d2ffd7f4fd778c151ccd81016bb16ba2..54ff374c5ed5d30b0b03f06c1f8692de8c58e54e 100644 (file)
@@ -20,7 +20,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 #define IS_FLASH_LOADER        0
 
index 019b542529807103d8a16b09c82a1bd227630504..cf6299ca18afee1876e524e5b2bbd43114481766 100644 (file)
@@ -21,8 +21,6 @@
 
 /* Common definitions for the USB flash loader */
 
-#define HAS_TASK_QUEUE         0
-
 #define HAS_USB                        1
 #define USE_USB_STDIO          0
 #define HAS_USB_DISABLE                0
index 853b6841fca83f612d2e805f56e2affb4d31dcbb..268cf2f206dc07714238634e27cb4cd96f85fc7e 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         0
 
 /* Bridge SB17 on the board and use the MCO from the other chip */
 #define AO_HSE         8000000
index 8503c4fd2eebade428b724ecd10260fd3bfce0bf..93264031dd7a427f03ee6addbae83b4dae2efd27 100644 (file)
@@ -71,7 +71,6 @@
 #define HAS_USB                        1
 #define HAS_BEEP               0
 #define PACKET_HAS_SLAVE       0
-#define HAS_TASK_QUEUE         1
 
 #define CONSOLE_STDIN          1
 
index d00deffab2161b80e0333f6524567deefdb87052..0d81b5de47e6170fccfe160f34a90f4f9c1fa97b 100644 (file)
@@ -67,10 +67,7 @@ void stm_systick_isr(void)
 #if HAS_TICK
                ++ao_tick_count;
 #endif
-#if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
-#endif
+               ao_task_check_alarm();
 #if AO_DATA_ALL
                if (++ao_data_count == ao_data_interval) {
                        ao_data_count = 0;
index 7dd4c80d79266b00856f43677a5fe1cfc04f476f..6d75f1885f3a36e4a33c2a2cb9844008e983bc89 100644 (file)
 #define AO_STACK_SIZE  2048
 #endif
 
-#ifndef HAS_TASK_QUEUE
-#define HAS_TASK_QUEUE 1
-#endif
-
 #define AO_STACK_ALIGNMENT __attribute__ ((aligned(8)))
 
 #define AO_PORT_TYPE   uint16_t
index fb83db003aa46085f37a3b294e2da02402dc49b3..999b587f3e7933862bbad0f72e783e15f3c11dee 100644 (file)
@@ -47,10 +47,7 @@ void stm_systick_isr(void)
 #if HAS_TICK
                ++ao_tick_count;
 #endif
-#if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
-#endif
+               ao_task_check_alarm();
 #if AO_DATA_ALL
                if (++ao_data_count == ao_data_interval) {
                        ao_data_count = 0;
index e51ab319af8adb884d760dec3f25f473c8508155..542d2eec3572f850a8ea5b63008af478f7a08b64 100644 (file)
@@ -120,6 +120,9 @@ ao_adc_init(void);
 #define AO_LED_TYPE uint16_t
 #endif
 
+void
+ao_timer_stop(void);
+
 #endif /* _AO_ARCH_H_ */
 
 
index d2e581469f57c20b89ac593020820bd0681e98a1..89193333f5c32a138d2bd593ced54c2c04a1db1f 100644 (file)
@@ -62,10 +62,7 @@ void stm_systick_isr(void)
 {
        if (stm_systick.csr & (1 << STM_SYSTICK_CSR_COUNTFLAG)) {
                ++ao_tick_count;
-#if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
-#endif
+               ao_task_check_alarm();
 #if AO_DATA_ALL
                if (++ao_data_count == ao_data_interval) {
                        ao_data_count = 0;
@@ -101,4 +98,10 @@ ao_timer_init(void)
                           (STM_SYSTICK_CSR_CLKSOURCE_HCLK_8 << STM_SYSTICK_CSR_CLKSOURCE));
 }
 
+void
+ao_timer_stop(void)
+{
+       stm_systick.csr = 0;
+}
+
 #endif
index be333754cfa37298d669f57572eb4783d4999093..b0b6ec0a07e878d5f6c5dab4658468f7588c5f1f 100644 (file)
@@ -60,10 +60,7 @@ void stm_systick_isr(void)
 {
        if (stm_systick.csr & (1 << STM_SYSTICK_CSR_COUNTFLAG)) {
                ++ao_tick_count;
-#if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
-#endif
+               ao_task_check_alarm();
 #if AO_DATA_ALL
                if (++ao_data_count == ao_data_interval) {
                        ao_data_count = 0;
index cb0ec838e3bb90c9244297bd0d0e5b559a523967..6b006307545fe4d3625837301fec1b860ba37ce8 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index dcb5098dd7d41530d1aefb3cc4bfb5af13787230..d71f265501dbeeef35551cc3f1100673c5151c8d 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index ef988d8bf4dc5399d069dd1a916f79ea0ffe28f7..1b4efdd3dfbc2e485db85d37dfc229ac44aee507 100644 (file)
@@ -40,7 +40,6 @@
 #define AO_PA11_PA12_RMP       0
 
 #define IS_FLASH_LOADER        0
-#define HAS_TASK_QUEUE         1
 
 /*
  * Serial ports
index effc2322028e23733c806ba545abcb6b6157c837..5641462a3dcc5c485521bdb3935c93818405a191 100644 (file)
@@ -23,7 +23,6 @@
 
 #define AO_STACK_SIZE  320
 
-#define HAS_TASK_QUEUE         1
 
 #define IS_FLASH_LOADER        0
 
index 317289660aadeef0eb5e26a941aeef12f2391f6c..ff04a04465dc599a51cd333b9b87b634ed10f038 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index 0208fafa37cae69916683e5326bff7ad0c14f0e7..ea450354e4a6161bbd58393a25e99072d21cc3cd 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index a154225ec77d68bb907a96fef8fd456c3e5d46d8..fa953460ede8992d26d2e7857014e3d9c2ef3934 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index efb8edd202529cac6efb0190a9fdb2ef046c649e..4f3b73f7d4d3d75cbff63895122481e717e6933b 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index 4fff507633edb8275f41a2912fb18de4836da67d..29b5cc1d3163d7535926d7fd5411ea4bc80d30c8 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index 97267de98d39f1a44c07ff54581dc7242f7a4da9..fdf290716c041b0804fd617b8b066749288eb70b 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index e8c97ff4270461a4c3a7299202b47663250828a0..aa49483e8ee580fb8570965bfcb58d1dd6b76ace 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index a9651abb7e72956c4daea7202f0a1441b48217ef..a1d4aa28edb3378a1d8e7db4ae4cfb745566d635 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index b4dcc10c33889913478dc987ba9a06f6d8986467..dd030eeea0982480dffc32fe216c84cf6c1ba5d7 100644 (file)
@@ -19,7 +19,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 /* 8MHz High speed external crystal */
 #define AO_HSE                 8000000
index fe9d3879e8be58f8f53a58141b3a5a547b5ea3e5..649d52a79b3ee5682c193c9ea5e84e199c3895b5 100644 (file)
@@ -18,7 +18,6 @@
 #ifndef _AO_PINS_H_
 #define _AO_PINS_H_
 
-#define HAS_TASK_QUEUE         1
 
 #define IS_FLASH_LOADER        0