summaryrefslogtreecommitdiff
path: root/src/kernel/ao_task.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2019-02-04 22:38:23 -0800
committerKeith Packard <keithp@keithp.com>2019-02-18 13:08:23 -0800
commitd6c3c3618a708d2a1a7948454710e6ae21c2a426 (patch)
tree710bccaa175928f81ae71d515671e95a3821a3c9 /src/kernel/ao_task.h
parent63a44b9c169d042fb1a3997620477e7f00bb0918 (diff)
altos: Declare task stack as union of uint8_t and uint32_t
Support -Wcast-align and -Wpointer-arith while still allowing architectures to pick whether they want an 8-bit or 32-bit stack. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/kernel/ao_task.h')
-rw-r--r--src/kernel/ao_task.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/kernel/ao_task.h b/src/kernel/ao_task.h
index 709e10c6..d27ef060 100644
--- a/src/kernel/ao_task.h
+++ b/src/kernel/ao_task.h
@@ -37,19 +37,24 @@
/* An AltOS task */
struct ao_task {
- void *wchan; /* current wait channel (NULL if running) */
+ void *wchan; /* current wait channel (NULL if running) */
uint16_t alarm; /* abort ao_sleep time */
- ao_arch_task_members /* any architecture-specific fields */
- uint8_t task_id; /* unique id */
+ uint16_t task_id; /* unique id */
+ /* Saved stack pointer */
+ union {
+ uint32_t *sp32;
+ uint8_t *sp8;
+ };
const char *name; /* task name */
-#ifdef NEWLIB
- int __errno; /* storage for errno in newlib libc */
-#endif
#if HAS_TASK_QUEUE
struct ao_list queue;
struct ao_list alarm_queue;
#endif
- uint8_t stack[AO_STACK_SIZE] AO_STACK_ALIGNMENT; /* saved stack */
+ /* Provide both 32-bit and 8-bit stacks, always 32-bit aligned */
+ union {
+ uint32_t stack32[AO_STACK_SIZE>>2];
+ uint8_t stack8[AO_STACK_SIZE];
+ };
#if HAS_SAMPLE_PROFILE
uint32_t ticks;
uint32_t yields;