From: Stephan Baerwolf Date: Sat, 10 Nov 2012 10:55:06 +0000 (+0100) Subject: minimize code and improve autoselection X-Git-Tag: v0.85~1 X-Git-Url: http://git.linex4red.de/pub/USBaspLoader.git/commitdiff_plain/5d520b59d02b9994543f98836218301d686a49e9?ds=inline minimize code and improve autoselection Signed-off-by: Stephan Baerwolf --- diff --git a/Makefile b/Makefile index 68af2f9..6e24fc8 100644 --- a/Makefile +++ b/Makefile @@ -14,9 +14,17 @@ firmware: do_firmware updater: do_updater do_firmware: + $(ECHO) "." + $(ECHO) "." + $(ECHO) "======>BUILDING BOOTLOADER FIRMWARE" + $(ECHO) "." $(MAKE) -C firmware all do_updater: + $(ECHO) "." + $(ECHO) "." + $(ECHO) "======>BUILDING BOOTLOADER UPDATER (EXPERIMENTAL)" + $(ECHO) "." $(MAKE) -C updater all deepclean: clean diff --git a/Makefile.inc b/Makefile.inc index 9575920..6ecc33e 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -11,6 +11,11 @@ DEVICE = atmega8 # where the updating firmware should be located (starting address) FLASHADDRESS = 0x0000 +# some MCUs with small BLS (bootloader section) need to deactivate some +# features in order to fit into BLS. +# If this option is enabled, also essential features may become deactivated +# Esp. you MUST ensure not to have watchdog initially enabled when using this! +DANGEROUS=0 # PROGRAMMER contains AVRDUDE options to address your programmer # PROGRAMMER = -c pony-stk200 @@ -56,7 +61,16 @@ FUSEOPT_1284 = unknown BOOTLOADER_ADDRESS_1284 = 0x1E000 + +ifeq ($(DANGEROUS), 1) + CHOOSEFLASHSAVE = -DCONFIG_NO__NEED_WATCHDOG +else + CHOOSEFLASHSAVE = -DCONFIG_NO__BOOTLOADER_CAN_EXIT +endif + + #autoselect logic +DEFINES = #-DDEBUG_LEVEL=2 ifeq ($(DEVICE), atmega8) FUSEOPT = $(FUSEOPT_8) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8) @@ -66,36 +80,47 @@ else ifeq ($(DEVICE), atmega32) else ifeq ($(DEVICE), atmega88) FUSEOPT = $(FUSEOPT_88) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE else ifeq ($(DEVICE), atmega88a) FUSEOPT = $(FUSEOPT_88) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE else ifeq ($(DEVICE), atmega88p) FUSEOPT = $(FUSEOPT_88) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE else ifeq ($(DEVICE), atmega88pa) FUSEOPT = $(FUSEOPT_88) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_88) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE else ifeq ($(DEVICE), atmega164a) FUSEOPT = $(FUSEOPT_164) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT else ifeq ($(DEVICE), atmega164p) FUSEOPT = $(FUSEOPT_164) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT else ifeq ($(DEVICE), atmega164pa) FUSEOPT = $(FUSEOPT_164) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_164) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE -DCONFIG_NO__BOOTLOADER_CAN_EXIT else ifeq ($(DEVICE), atmega168) FUSEOPT = $(FUSEOPT_168) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE) else ifeq ($(DEVICE), atmega168a) FUSEOPT = $(FUSEOPT_168) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE) else ifeq ($(DEVICE), atmega168p) FUSEOPT = $(FUSEOPT_168) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE) else ifeq ($(DEVICE), atmega168pa) FUSEOPT = $(FUSEOPT_168) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_168) + DEFINES += -DCONFIG_NO__HAVE_READ_LOCK_FUSE $(CHOOSEFLASHSAVE) else ifeq ($(DEVICE), atmega324a) FUSEOPT = $(FUSEOPT_324) BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324) diff --git a/firmware/Makefile b/firmware/Makefile index 094fc2f..ba588dd 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -17,8 +17,6 @@ include ../Makefile.inc -# Options: -DEFINES = #-DDEBUG_LEVEL=2 # Remove the -fno-* options when you use gcc 3, it does not understand them CFLAGS = -Wall -Os -fno-move-loop-invariants -fno-tree-scev-cprop -fno-inline-small-functions -I. -mmcu=$(DEVICE) -DBOOTLOADER_ADDRESS=$(BOOTLOADER_ADDRESS) -DF_CPU=$(F_CPU) $(DEFINES) LDFLAGS = -Wl,--relax,--gc-sections -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) diff --git a/firmware/spminterface.h b/firmware/spminterface.h index db1cfdb..544aceb 100644 --- a/firmware/spminterface.h +++ b/firmware/spminterface.h @@ -4,7 +4,7 @@ * Creation Date: 2012-08-01 * Copyright: (c) 2012 by Stephan Baerwolf * License: GNU GPL v2 (see License.txt) - * Version: 0.8 + * Version: 0.85 */ #ifndef SPMINTERFACE_H_f70ba6adf7624275947e859bdbff0599 @@ -211,9 +211,8 @@ void do_spm(const uint32_t flash_byteaddress, const uint8_t spmcrval, const uint #endif //assume SPMCR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6 -const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, - 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF}; +const uint16_t bootloader__do_spm[16] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, + 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508}; /* 00001826 : 1826: 00 00 nop @@ -244,9 +243,8 @@ const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb #elif defined (__AVR_ATmega48__) || defined (__AVR_ATmega48P__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega168P__) //assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6 -const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, - 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF}; +const uint16_t bootloader__do_spm[15] BOOTLIBLINK = { 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, + 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508}; #if defined (__AVR_ATmega88__) || defined (__AVR_ATmega88P__) #if (BOOTLOADER_ADDRESS != 0x1800) @@ -307,9 +305,8 @@ const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb #endif //assume SPMCR:=SPMCSR==0x37, SPMEN:=SELFPRGEN==0x0, RWWSRE=0x4, RWWSB=0x6 -const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0x0000, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, - 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF}; +const uint16_t bootloader__do_spm[15] BOOTLIBLINK = { 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, + 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508}; /* 00001826 : 1826: 00 00 nop @@ -382,9 +379,8 @@ const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0xbebb, 0x2dec, 0x2dfd, 0x9 #elif defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__) || defined (__AVR_ATmega324A__) || defined (__AVR_ATmega324P__) || defined (__AVR_ATmega324PA__) || defined (__AVR_ATmega644__) || defined (__AVR_ATmega644A__) || defined (__AVR_ATmega644P__) || defined (__AVR_ATmega644PA__) || defined (__AVR_ATmega1284__) || defined (__AVR_ATmega1284P__) //assume SPMCR:=SPCSR==0x37, SPMEN==0x0, RWWSRE=0x4, RWWSB=0x6 and rampZ=0x3b -const uint16_t bootloader__do_spm[20] BOOTLIBLINK = {0xbebb, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, - 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508, 0xFFFF, 0xFFFF - 0xFFFF, 0xFFFF}; +const uint16_t bootloader__do_spm[16] BOOTLIBLINK = {0xbebb, 0x2dec, 0x2dfd, 0xb6b7, 0xfcb0, 0xcffd, 0xbf27, 0x95e8, 0xb6b7, + 0xfcb0, 0xcffd, 0xe121, 0xb6b7, 0xfcb6, 0xcff4, 0x9508}; #if defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__) #if (BOOTLOADER_ADDRESS != 0x3800)