diff options
Diffstat (limited to 'src/kernel')
| -rw-r--r-- | src/kernel/ao_list.h | 2 | ||||
| -rw-r--r-- | src/kernel/ao_pyro.c | 4 | ||||
| -rw-r--r-- | src/kernel/ao_task.h | 13 | 
3 files changed, 15 insertions, 4 deletions
| diff --git a/src/kernel/ao_list.h b/src/kernel/ao_list.h index e2df6885..45a3df5b 100644 --- a/src/kernel/ao_list.h +++ b/src/kernel/ao_list.h @@ -138,7 +138,7 @@ ao_list_is_empty(struct ao_list *head)   * @return A pointer to the data struct containing the list head.   */  #define ao_container_of(ptr, type, member) \ -	((type *)((char *)(ptr) - offsetof(type, member))) +	((type *)((void *) ((char *)(ptr) - offsetof(type, member))))  /**   * Alias of ao_container_of diff --git a/src/kernel/ao_pyro.c b/src/kernel/ao_pyro.c index c9920ab3..813e866a 100644 --- a/src/kernel/ao_pyro.c +++ b/src/kernel/ao_pyro.c @@ -437,7 +437,7 @@ ao_pyro_show(void)  				if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE)  					value = *((uint8_t *) ((char *) pyro + ao_pyro_values[v].offset));  				else -					value = *((int16_t *) ((char *) pyro + ao_pyro_values[v].offset)); +					value = *((int16_t *) (void *) ((char *) pyro + ao_pyro_values[v].offset));  				printf ("%6d ", value);  			} else {  				printf ("       "); @@ -516,7 +516,7 @@ ao_pyro_set(void)  			} else {  				if (negative)  					ao_cmd_lex_i = -ao_cmd_lex_i; -				*((int16_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i; +				*((int16_t *) (void *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i;  			}  		}  	} diff --git a/src/kernel/ao_task.h b/src/kernel/ao_task.h index f1dbd654..30b018ff 100644 --- a/src/kernel/ao_task.h +++ b/src/kernel/ao_task.h @@ -26,6 +26,17 @@  #define HAS_TASK_INFO 1  #endif +/* arm stacks must be 32-bit aligned */ +#ifdef __arm__ +#define AO_STACK_ALIGNMENT __attribute__ ((aligned(4))) +#endif +#ifdef SDCC +#define AO_STACK_ALIGNMENT +#endif +#ifdef __AVR__ +#define AO_STACK_ALIGNMENT +#endif +  /* An AltOS task */  struct ao_task {  	__xdata void *wchan;		/* current wait channel (NULL if running) */ @@ -37,7 +48,7 @@ struct ao_task {  	struct ao_list	queue;  	struct ao_list	alarm_queue;  #endif -	uint8_t	stack[AO_STACK_SIZE];	/* saved stack */ +	uint8_t stack[AO_STACK_SIZE] AO_STACK_ALIGNMENT;	/* saved stack */  #if HAS_SAMPLE_PROFILE  	uint32_t ticks;  	uint32_t yields; | 
