diff options
Diffstat (limited to 'src/stm')
| -rw-r--r-- | src/stm/altos.ld | 21 | ||||
| -rw-r--r-- | src/stm/ao_arch.h | 12 | ||||
| -rw-r--r-- | src/stm/ao_romconfig.c | 7 | 
3 files changed, 29 insertions, 11 deletions
| diff --git a/src/stm/altos.ld b/src/stm/altos.ld index f5a84f4c..f78a45d6 100644 --- a/src/stm/altos.ld +++ b/src/stm/altos.ld @@ -25,18 +25,22 @@ INCLUDE registers.ld  EXTERN (stm_interrupt_vector)  SECTIONS { -	. = ORIGIN(rom); -  	/*  	 * Rom contents  	 */ -	__text_start__ = .; - -	.text : { +	.text ORIGIN(rom) : { +		__text_start__ = .;  		*(.interrupt)	/* Interrupt vectors */ + +		. = ORIGIN(rom) + 0x100; + +		ao_romconfig.o(.romconfig*) +		ao_product.o(.romconfig*) +  		*(.text*)	/* Executable code */  		*(.rodata*)	/* Constants */ +  	} > rom  	.ARM.exidx : { @@ -44,12 +48,10 @@ SECTIONS {  		__text_end__ = .;  	} > rom -	. = ORIGIN(ram); -	__data_start__ = .; -  	/* Data -- relocated to RAM, but written to ROM  	 */ -	.data : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) { +	.data ORIGIN(ram) : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) { +		__data_start__ = .;  		*(.data)	/* initialized data */  		__data_end__ = .;  		__bss_start__ = .; @@ -63,7 +65,6 @@ SECTIONS {  	PROVIDE(__stack__ = ORIGIN(ram) + LENGTH(ram));  	PROVIDE(end = .); -  }  ENTRY(start); diff --git a/src/stm/ao_arch.h b/src/stm/ao_arch.h index d8fa3e89..484ce89e 100644 --- a/src/stm/ao_arch.h +++ b/src/stm/ao_arch.h @@ -59,7 +59,19 @@ extern void putchar(char c);  extern char getchar(void);  extern void ao_avr_stdio_init(void); + +/* + * ao_romconfig.c + */ + +#define AO_ROMCONFIG_VERSION	2 + +#define AO_ROMCONFIG_SYMBOL(a) __attribute__((section(".romconfig"))) const + +extern const uint16_t ao_romconfig_version; +extern const uint16_t ao_romconfig_check;  extern const uint16_t ao_serial_number; +extern const uint32_t ao_radio_cal;  #define ARM_PUSH32(stack, val)	(*(--(stack)) = (val)) diff --git a/src/stm/ao_romconfig.c b/src/stm/ao_romconfig.c index 84317458..cbb922ec 100644 --- a/src/stm/ao_romconfig.c +++ b/src/stm/ao_romconfig.c @@ -17,4 +17,9 @@  #include "ao.h" -const uint16_t ao_serial_number = 58; +AO_ROMCONFIG_SYMBOL (0) uint16_t ao_romconfig_version = AO_ROMCONFIG_VERSION; +AO_ROMCONFIG_SYMBOL (0) uint16_t ao_romconfig_check = ~AO_ROMCONFIG_VERSION; +AO_ROMCONFIG_SYMBOL (0) uint16_t ao_serial_number = 0; +#ifdef AO_RADIO_CAL_DEFAULT +AO_ROMCONFIG_SYMBOL (0) uint32_t ao_radio_cal = AO_RADIO_CAL_DEFAULT; +#endif | 
