minimize code and improve autoselection
authorStephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
Sat, 10 Nov 2012 10:55:06 +0000 (11:55 +0100)
committerStephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
Sat, 10 Nov 2012 11:27:27 +0000 (11:27 +0000)
Signed-off-by: Stephan Baerwolf <stephan.baerwolf@tu-ilmenau.de>
Makefile
Makefile.inc
firmware/Makefile
firmware/spminterface.h

index 68af2f9..6e24fc8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,9 +14,17 @@ firmware: do_firmware
 updater: do_updater
 
 do_firmware:
 updater: do_updater
 
 do_firmware:
+       $(ECHO) "."
+       $(ECHO) "."
+       $(ECHO) "======>BUILDING BOOTLOADER FIRMWARE"
+       $(ECHO) "."
        $(MAKE) -C firmware all
 
 do_updater:
        $(MAKE) -C firmware all
 
 do_updater:
+       $(ECHO) "."
+       $(ECHO) "."
+       $(ECHO) "======>BUILDING BOOTLOADER UPDATER (EXPERIMENTAL)"
+       $(ECHO) "."
        $(MAKE) -C updater all
 
 deepclean: clean
        $(MAKE) -C updater all
 
 deepclean: clean
index 9575920..6ecc33e 100644 (file)
@@ -11,6 +11,11 @@ DEVICE = atmega8
 # where the updating firmware should be located (starting address)
 FLASHADDRESS = 0x0000
 
 # 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
 
 # PROGRAMMER contains AVRDUDE options to address your programmer
 # PROGRAMMER = -c pony-stk200
@@ -56,7 +61,16 @@ FUSEOPT_1284            = unknown
 BOOTLOADER_ADDRESS_1284 = 0x1E000
 
 
 BOOTLOADER_ADDRESS_1284 = 0x1E000
 
 
+
+ifeq ($(DANGEROUS), 1)
+  CHOOSEFLASHSAVE = -DCONFIG_NO__NEED_WATCHDOG
+else
+  CHOOSEFLASHSAVE = -DCONFIG_NO__BOOTLOADER_CAN_EXIT
+endif
+
+
 #autoselect logic
 #autoselect logic
+DEFINES = #-DDEBUG_LEVEL=2
 ifeq ($(DEVICE), atmega8)
   FUSEOPT            = $(FUSEOPT_8)
   BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_8)  
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 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)
 else ifeq ($(DEVICE), atmega324a)
   FUSEOPT            = $(FUSEOPT_324)
   BOOTLOADER_ADDRESS = $(BOOTLOADER_ADDRESS_324)
index 094fc2f..ba588dd 100644 (file)
@@ -17,8 +17,6 @@
 
 include ../Makefile.inc
 
 
 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)
 # 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)
index db1cfdb..544aceb 100644 (file)
@@ -4,7 +4,7 @@
  * Creation Date: 2012-08-01
  * Copyright: (c) 2012 by Stephan Baerwolf
  * License: GNU GPL v2 (see License.txt)
  * 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
  */
 
 #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
 #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 <bootloader__do_spm>:
     1826:      00 00           nop
 /*
 00001826 <bootloader__do_spm>:
     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
 
 #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)
 
 #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
 #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 <bootloader__do_spm>:
     1826:      00 00           nop
 /*
 00001826 <bootloader__do_spm>:
     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
 
 #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)
 
 #if defined (__AVR_ATmega164A__) || defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164PA__)
   #if (BOOTLOADER_ADDRESS != 0x3800)