From 7b1f4177d42e5e951a7db4289c847d355a785c2a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 6 Aug 2020 11:05:03 -0700 Subject: [PATCH] altos: Remove support for !HAS_TASK_QUEUE 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 --- src/cortexelf-v1/ao_pins.h | 1 - src/easymega-v1.0/ao_pins.h | 1 - src/easymega-v2.0/ao_pins.h | 1 - src/easymega-v3.0/ao_pins.h | 1 - src/easymini-v1.0/ao_pins.h | 5 +- src/easytimer-v1/ao_pins.h | 1 - src/fox1ihu/ao_pins.h | 1 - src/kernel/ao_task.c | 161 ++++++++------------------------- src/kernel/ao_task.h | 27 +++--- src/lpc/ao_timer_lpc.c | 6 +- src/mpusb-v3.0/ao_pins.h | 1 - src/product/ao_flash_pins.h | 2 - src/stm-flash/ao_pins.h | 1 - src/stm-vga/ao_pins.h | 1 - src/stm/ao_timer.c | 5 +- src/stm32f4/ao_arch.h | 4 - src/stm32f4/ao_timer.c | 5 +- src/stm32l0/ao_arch.h | 3 + src/stm32l0/ao_timer.c | 11 ++- src/stmf0/ao_timer.c | 5 +- src/teleballoon-v2.0/ao_pins.h | 1 - src/telebt-v3.0/ao_pins.h | 1 - src/telebt-v4.0/ao_pins.h | 1 - src/teledongle-v3.0/ao_pins.h | 1 - src/telegps-v0.1/ao_pins.h | 1 - src/telemega-v0.1/ao_pins.h | 1 - src/telemega-v1.0/ao_pins.h | 1 - src/telemega-v2.0/ao_pins.h | 1 - src/telemega-v3.0/ao_pins.h | 1 - src/telemega-v4.0/ao_pins.h | 1 - src/telemetrum-v2.0/ao_pins.h | 1 - src/telemetrum-v3.0/ao_pins.h | 1 - src/tmgps-v2.0/ao_pins.h | 1 - src/vidtime/ao_pins.h | 1 - 34 files changed, 72 insertions(+), 185 deletions(-) diff --git a/src/cortexelf-v1/ao_pins.h b/src/cortexelf-v1/ao_pins.h index c2bbf2d2..2a94d968 100644 --- a/src/cortexelf-v1/ao_pins.h +++ b/src/cortexelf-v1/ao_pins.h @@ -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 diff --git a/src/easymega-v1.0/ao_pins.h b/src/easymega-v1.0/ao_pins.h index bfa777c6..d16843d6 100644 --- a/src/easymega-v1.0/ao_pins.h +++ b/src/easymega-v1.0/ao_pins.h @@ -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 diff --git a/src/easymega-v2.0/ao_pins.h b/src/easymega-v2.0/ao_pins.h index d7f90334..a3d04da5 100644 --- a/src/easymega-v2.0/ao_pins.h +++ b/src/easymega-v2.0/ao_pins.h @@ -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 diff --git a/src/easymega-v3.0/ao_pins.h b/src/easymega-v3.0/ao_pins.h index 31ebfa45..863909d5 100644 --- a/src/easymega-v3.0/ao_pins.h +++ b/src/easymega-v3.0/ao_pins.h @@ -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 diff --git a/src/easymini-v1.0/ao_pins.h b/src/easymini-v1.0/ao_pins.h index 201b913e..ef8cba2d 100644 --- a/src/easymini-v1.0/ao_pins.h +++ b/src/easymini-v1.0/ao_pins.h @@ -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 diff --git a/src/easytimer-v1/ao_pins.h b/src/easytimer-v1/ao_pins.h index 3ceb49f3..1169a283 100644 --- a/src/easytimer-v1/ao_pins.h +++ b/src/easytimer-v1/ao_pins.h @@ -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 diff --git a/src/fox1ihu/ao_pins.h b/src/fox1ihu/ao_pins.h index b5dd7283..34fdefe6 100644 --- a/src/fox1ihu/ao_pins.h +++ b/src/fox1ihu/ao_pins.h @@ -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 diff --git a/src/kernel/ao_task.c b/src/kernel/ao_task.c index 38aefbec..dd278bde 100644 --- a/src/kernel/ao_task.c +++ b/src/kernel/ao_task.c @@ -28,16 +28,10 @@ #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(); diff --git a/src/kernel/ao_task.h b/src/kernel/ao_task.h index 7d81c1da..beb4da30 100644 --- a/src/kernel/ao_task.h +++ b/src/kernel/ao_task.h @@ -18,9 +18,8 @@ #ifndef _AO_TASK_H_ #define _AO_TASK_H_ -#if HAS_TASK_QUEUE + #include -#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 diff --git a/src/lpc/ao_timer_lpc.c b/src/lpc/ao_timer_lpc.c index 62b16318..a334ee0d 100644 --- a/src/lpc/ao_timer_lpc.c +++ b/src/lpc/ao_timer_lpc.c @@ -17,6 +17,7 @@ */ #include +#include #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; diff --git a/src/mpusb-v3.0/ao_pins.h b/src/mpusb-v3.0/ao_pins.h index 3e79aad3..54ff374c 100644 --- a/src/mpusb-v3.0/ao_pins.h +++ b/src/mpusb-v3.0/ao_pins.h @@ -20,7 +20,6 @@ #ifndef _AO_PINS_H_ #define _AO_PINS_H_ -#define HAS_TASK_QUEUE 1 #define IS_FLASH_LOADER 0 diff --git a/src/product/ao_flash_pins.h b/src/product/ao_flash_pins.h index 019b5425..cf6299ca 100644 --- a/src/product/ao_flash_pins.h +++ b/src/product/ao_flash_pins.h @@ -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 diff --git a/src/stm-flash/ao_pins.h b/src/stm-flash/ao_pins.h index 853b6841..268cf2f2 100644 --- a/src/stm-flash/ao_pins.h +++ b/src/stm-flash/ao_pins.h @@ -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 diff --git a/src/stm-vga/ao_pins.h b/src/stm-vga/ao_pins.h index 8503c4fd..93264031 100644 --- a/src/stm-vga/ao_pins.h +++ b/src/stm-vga/ao_pins.h @@ -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 diff --git a/src/stm/ao_timer.c b/src/stm/ao_timer.c index d00deffa..0d81b5de 100644 --- a/src/stm/ao_timer.c +++ b/src/stm/ao_timer.c @@ -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; diff --git a/src/stm32f4/ao_arch.h b/src/stm32f4/ao_arch.h index 7dd4c80d..6d75f188 100644 --- a/src/stm32f4/ao_arch.h +++ b/src/stm32f4/ao_arch.h @@ -22,10 +22,6 @@ #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 diff --git a/src/stm32f4/ao_timer.c b/src/stm32f4/ao_timer.c index fb83db00..999b587f 100644 --- a/src/stm32f4/ao_timer.c +++ b/src/stm32f4/ao_timer.c @@ -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; diff --git a/src/stm32l0/ao_arch.h b/src/stm32l0/ao_arch.h index e51ab319..542d2eec 100644 --- a/src/stm32l0/ao_arch.h +++ b/src/stm32l0/ao_arch.h @@ -120,6 +120,9 @@ ao_adc_init(void); #define AO_LED_TYPE uint16_t #endif +void +ao_timer_stop(void); + #endif /* _AO_ARCH_H_ */ diff --git a/src/stm32l0/ao_timer.c b/src/stm32l0/ao_timer.c index d2e58146..89193333 100644 --- a/src/stm32l0/ao_timer.c +++ b/src/stm32l0/ao_timer.c @@ -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 diff --git a/src/stmf0/ao_timer.c b/src/stmf0/ao_timer.c index be333754..b0b6ec0a 100644 --- a/src/stmf0/ao_timer.c +++ b/src/stmf0/ao_timer.c @@ -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; diff --git a/src/teleballoon-v2.0/ao_pins.h b/src/teleballoon-v2.0/ao_pins.h index cb0ec838..6b006307 100644 --- a/src/teleballoon-v2.0/ao_pins.h +++ b/src/teleballoon-v2.0/ao_pins.h @@ -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 diff --git a/src/telebt-v3.0/ao_pins.h b/src/telebt-v3.0/ao_pins.h index dcb5098d..d71f2655 100644 --- a/src/telebt-v3.0/ao_pins.h +++ b/src/telebt-v3.0/ao_pins.h @@ -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 diff --git a/src/telebt-v4.0/ao_pins.h b/src/telebt-v4.0/ao_pins.h index ef988d8b..1b4efdd3 100644 --- a/src/telebt-v4.0/ao_pins.h +++ b/src/telebt-v4.0/ao_pins.h @@ -40,7 +40,6 @@ #define AO_PA11_PA12_RMP 0 #define IS_FLASH_LOADER 0 -#define HAS_TASK_QUEUE 1 /* * Serial ports diff --git a/src/teledongle-v3.0/ao_pins.h b/src/teledongle-v3.0/ao_pins.h index effc2322..5641462a 100644 --- a/src/teledongle-v3.0/ao_pins.h +++ b/src/teledongle-v3.0/ao_pins.h @@ -23,7 +23,6 @@ #define AO_STACK_SIZE 320 -#define HAS_TASK_QUEUE 1 #define IS_FLASH_LOADER 0 diff --git a/src/telegps-v0.1/ao_pins.h b/src/telegps-v0.1/ao_pins.h index 31728966..ff04a044 100644 --- a/src/telegps-v0.1/ao_pins.h +++ b/src/telegps-v0.1/ao_pins.h @@ -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 diff --git a/src/telemega-v0.1/ao_pins.h b/src/telemega-v0.1/ao_pins.h index 0208fafa..ea450354 100644 --- a/src/telemega-v0.1/ao_pins.h +++ b/src/telemega-v0.1/ao_pins.h @@ -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 diff --git a/src/telemega-v1.0/ao_pins.h b/src/telemega-v1.0/ao_pins.h index a154225e..fa953460 100644 --- a/src/telemega-v1.0/ao_pins.h +++ b/src/telemega-v1.0/ao_pins.h @@ -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 diff --git a/src/telemega-v2.0/ao_pins.h b/src/telemega-v2.0/ao_pins.h index efb8edd2..4f3b73f7 100644 --- a/src/telemega-v2.0/ao_pins.h +++ b/src/telemega-v2.0/ao_pins.h @@ -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 diff --git a/src/telemega-v3.0/ao_pins.h b/src/telemega-v3.0/ao_pins.h index 4fff5076..29b5cc1d 100644 --- a/src/telemega-v3.0/ao_pins.h +++ b/src/telemega-v3.0/ao_pins.h @@ -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 diff --git a/src/telemega-v4.0/ao_pins.h b/src/telemega-v4.0/ao_pins.h index 97267de9..fdf29071 100644 --- a/src/telemega-v4.0/ao_pins.h +++ b/src/telemega-v4.0/ao_pins.h @@ -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 diff --git a/src/telemetrum-v2.0/ao_pins.h b/src/telemetrum-v2.0/ao_pins.h index e8c97ff4..aa49483e 100644 --- a/src/telemetrum-v2.0/ao_pins.h +++ b/src/telemetrum-v2.0/ao_pins.h @@ -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 diff --git a/src/telemetrum-v3.0/ao_pins.h b/src/telemetrum-v3.0/ao_pins.h index a9651abb..a1d4aa28 100644 --- a/src/telemetrum-v3.0/ao_pins.h +++ b/src/telemetrum-v3.0/ao_pins.h @@ -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 diff --git a/src/tmgps-v2.0/ao_pins.h b/src/tmgps-v2.0/ao_pins.h index b4dcc10c..dd030eee 100644 --- a/src/tmgps-v2.0/ao_pins.h +++ b/src/tmgps-v2.0/ao_pins.h @@ -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 diff --git a/src/vidtime/ao_pins.h b/src/vidtime/ao_pins.h index fe9d3879..649d52a7 100644 --- a/src/vidtime/ao_pins.h +++ b/src/vidtime/ao_pins.h @@ -18,7 +18,6 @@ #ifndef _AO_PINS_H_ #define _AO_PINS_H_ -#define HAS_TASK_QUEUE 1 #define IS_FLASH_LOADER 0 -- 2.30.2