diff options
author | Keith Packard <keithp@keithp.com> | 2017-12-12 15:30:45 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2017-12-12 15:30:45 -0800 |
commit | db352bd0723e8d640bb034bc14e5ad193f0afe1d (patch) | |
tree | 3f414896a52bfaea41c4c5bfe8b4e3b2473aba57 /src | |
parent | 09ea349f5b37e257e8ca23ead493ba1694395530 (diff) |
altos/kernel: Allow ao_cmd to be built without tasking
Useful for single-threaded applications, like lambdakey
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel/ao.h | 3 | ||||
-rw-r--r-- | src/kernel/ao_cmd.c | 6 | ||||
-rw-r--r-- | src/kernel/ao_notask.c | 15 | ||||
-rw-r--r-- | src/lambdakey-v1.0/ao_pins.h | 1 |
4 files changed, 24 insertions, 1 deletions
diff --git a/src/kernel/ao.h b/src/kernel/ao.h index 139050cf..2bd0e367 100644 --- a/src/kernel/ao.h +++ b/src/kernel/ao.h @@ -218,6 +218,9 @@ ao_cmd_register(const __code struct ao_cmds *cmds); void ao_cmd_init(void); +void +ao_cmd(void); + #if HAS_CMD_FILTER /* * Provided by an external module to filter raw command lines diff --git a/src/kernel/ao_cmd.c b/src/kernel/ao_cmd.c index c1e9cef2..405fd126 100644 --- a/src/kernel/ao_cmd.c +++ b/src/kernel/ao_cmd.c @@ -423,11 +423,13 @@ ao_loader(void) } #endif +#if HAS_TASK __xdata struct ao_task ao_cmd_task; +#endif __code struct ao_cmds ao_base_cmds[] = { { help, "?\0Help" }, -#if HAS_TASK_INFO +#if HAS_TASK_INFO && HAS_TASK { ao_task_info, "T\0Tasks" }, #endif { echo, "E <0 off, 1 on>\0Echo" }, @@ -445,5 +447,7 @@ void ao_cmd_init(void) { ao_cmd_register(&ao_base_cmds[0]); +#if HAS_TASK ao_add_task(&ao_cmd_task, ao_cmd, "cmd"); +#endif } diff --git a/src/kernel/ao_notask.c b/src/kernel/ao_notask.c index 00fe1ed6..7207353a 100644 --- a/src/kernel/ao_notask.c +++ b/src/kernel/ao_notask.c @@ -39,6 +39,21 @@ ao_sleep(__xdata void *wchan) return 0; } +#if HAS_AO_DELAY +void +ao_delay(uint16_t 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); +} +#endif + void ao_wakeup(__xdata void *wchan) { diff --git a/src/lambdakey-v1.0/ao_pins.h b/src/lambdakey-v1.0/ao_pins.h index cb1c4aa7..48b9db16 100644 --- a/src/lambdakey-v1.0/ao_pins.h +++ b/src/lambdakey-v1.0/ao_pins.h @@ -20,6 +20,7 @@ #define _AO_PINS_H_ #define HAS_TASK 0 +#define HAS_AO_DELAY 1 #define LED_PORT_ENABLE STM_RCC_AHBENR_IOPBEN #define LED_PORT (&stm_gpiob) |