From ba95cb77432eced298b11d7fb85345a124583849 Mon Sep 17 00:00:00 2001 From: Martyn Ranyard Date: Fri, 2 Nov 2012 19:16:54 +0000 Subject: [PATCH 1/3] Here, using the flag itself makes the bootloader build where it currently does not for the 328 amongst others --- hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c b/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c index 2b9fefa2633..2f010a25445 100755 --- a/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c +++ b/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c @@ -580,7 +580,7 @@ int main(void) /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes cli(); //Disable interrupts, just to be sure -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) +#if defined(EEPE) while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete #else while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete From 8d10d0368c88b506cd40d42181d2cdc6f723dd36 Mon Sep 17 00:00:00 2001 From: Martyn Ranyard Date: Fri, 2 Nov 2012 19:35:20 +0000 Subject: [PATCH 2/3] -O2 in new avr-gcc makes too big a bootloader to fit on 328(and 328p) --- hardware/arduino/bootloaders/atmega/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/arduino/bootloaders/atmega/Makefile b/hardware/arduino/bootloaders/atmega/Makefile index 0fd54db7f68..008ce85a09f 100755 --- a/hardware/arduino/bootloaders/atmega/Makefile +++ b/hardware/arduino/bootloaders/atmega/Makefile @@ -49,7 +49,7 @@ STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt OBJ = $(PROGRAM).o -OPTIMIZE = -O2 +OPTIMIZE = -Os DEFS = LIBS = From 7b506f7e9418e6dd9d3b11a4e08979fa6b83937b Mon Sep 17 00:00:00 2001 From: Martyn Ranyard Date: Fri, 2 Nov 2012 21:27:23 +0000 Subject: [PATCH 3/3] These should be defined() not just tested (i.e. noteq 0) --- hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c | 3 ++- hardware/arduino/bootloaders/bt/ATmegaBOOT_168.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c b/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c index 2f010a25445..7e58ac9ecc5 100755 --- a/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c +++ b/hardware/arduino/bootloaders/atmega/ATmegaBOOT_168.c @@ -541,6 +541,7 @@ int main(void) } else { getNch(3); byte_response(0x00); + } } @@ -679,7 +680,7 @@ int main(void) "rjmp write_page \n\t" "block_done: \n\t" "clr __zero_reg__ \n\t" //restore zero register -#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__ +#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) || defined (__AVR_ATmega128__) || defined (__AVR_ATmega1280__) || defined (__AVR_ATmega1281__) : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" #else : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" diff --git a/hardware/arduino/bootloaders/bt/ATmegaBOOT_168.c b/hardware/arduino/bootloaders/bt/ATmegaBOOT_168.c index c73eefa14ab..3c1b1335b48 100644 --- a/hardware/arduino/bootloaders/bt/ATmegaBOOT_168.c +++ b/hardware/arduino/bootloaders/bt/ATmegaBOOT_168.c @@ -675,7 +675,7 @@ putch(0x0D); "rjmp write_page \n\t" "block_done: \n\t" "clr __zero_reg__ \n\t" //restore zero register -#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" #else : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" @@ -707,7 +707,7 @@ putch(0x0D); putch(0x14); for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay if (flags.eeprom) { // Byte access EEPROM read -#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ +#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) while(EECR & (1<