Author: jaguarondi
Date: 2008-07-01 16:49:24 +0200 (Tue, 01 Jul 2008)
New Revision: 1290

Modified:
   firmware/rf/trunk/Makefile
   firmware/rf/trunk/device.c
Log:
* Fixed the jump for the bootloader.


Modified: firmware/rf/trunk/Makefile
===================================================================
--- firmware/rf/trunk/Makefile  2008-07-01 08:39:18 UTC (rev 1289)
+++ firmware/rf/trunk/Makefile  2008-07-01 14:49:24 UTC (rev 1290)
@@ -7,6 +7,15 @@
 CC = avr-gcc
 AVRDUDE = avrdude
 
+#Bootloader can be included with the program. If you keep the bootloader
+#already in the RF board, set this to 0.
+#CAUTION: don't set this to 1 if you want to reprogram the RF board with
+#tuxup, you may use a wrong rjump to the bootloader and brick your board. You
+#need an ISP programmer if you intend to play with the bootloader.
+#As of now, only GCC 3.4.6 seems to compile the bootlodaer so that it fits in
+#the 256 bytes section. 4.x generates code slightly too large to fit in.
+BOOTLOADER=0
+
 ## Options common to compile, link and assembly rules
 COMMON = -mmcu=$(MCU)
 
@@ -14,6 +23,7 @@
 CFLAGS = $(COMMON)
 CFLAGS += -Wall -gstabs -DF_CPU=13824000UL -Os -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums
 CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d 
+CFLAGS += -DBOOTLOADER=$(BOOTLOADER)
 ifneq (,$(findstring master, $(TYPE)))
     PROJECT = fuxrf
     CFLAGS += -D_MASTER
@@ -32,7 +42,7 @@
 
 ## Linker flags
 LDFLAGS = $(COMMON)
-LDFLAGS += -Wl,--section-start=.bootloader=0x0F00  
-Wl,--section-start=.version=0x0EF0 rf.ld
+LDFLAGS += -Wl,--section-start=.bootloader=0x0F00  
-Wl,--section-start=.version=0x0EF0 -Wl,--defsym=bootloader_start=0x0F0A rf.ld
 
 ## Intel Hex file production flags
 HEX_FLASH_FLAGS = -R .eeprom
@@ -42,7 +52,11 @@
 HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0
 
 ## Objects that must be built in order to link
+ifeq ($(BOOTLOADER),1)
 OBJECTS = device.o init.o misc.o prot.o rf_ctrl.o varis.o interface.o 
bootloader.o
+else
+OBJECTS = device.o init.o misc.o prot.o rf_ctrl.o varis.o interface.o
+endif
 
 ## Objects explicitly added by the user
 LINKONLYOBJECTS = 

Modified: firmware/rf/trunk/device.c
===================================================================
--- firmware/rf/trunk/device.c  2008-07-01 08:39:18 UTC (rev 1289)
+++ firmware/rf/trunk/device.c  2008-07-01 14:49:24 UTC (rev 1290)
@@ -70,8 +70,6 @@
 const version_t tag_version __attribute__ ((section("version.1"))) =
 {VERSION_CMD, CPU_VER_JOIN(CPU_NUMBER, VER_MAJOR), VER_MINOR, VER_UPDATE};
 
-/* Bootloader can be included with the program */
-#define BOOTLOADER 1
 /* Set to 1 to enable stack debugging. */
 #define DBG_STACK 0
 
@@ -114,18 +112,31 @@
 // 14 - 30 -> Payload                                                         *
 // 31      -> Checksum                                                        *
 //*****************************************************************************
+typedef void (*AppPtr_t)(void);
+const AppPtr_t RunBoot = (AppPtr_t) 0x0785;
+
 int main(void)
 {
-#if (BOOTLOADER)
 #ifdef _SLAVE
     volatile uint16_t _count=0;
+    /* Wait for the head button signal to rise if it isn't pressed. */
     for (;_count<0xFFFF; _count++);
-    if (!(PIND & 0x40)) /* if head is pushed at startup */
-        /* TODO change to a rjump to 0x0F0A */
-        asm volatile ("rjmp bootloader" ::); /* jump to bootloader */
+    /* If head is pushed at startup */
+    if (!(PIND & 0x40))
+        /* jump to bootloader */
+#if (BOOTLOADER)
+        asm volatile ("rjmp bootloader" ::);
+#else
+        asm volatile ("rjmp bootloader_start" ::);
+#endif
 #elif defined(_MASTER)
-    if (!(PINB & 0x04)) /* if SPI_SS is cleared at startup */
-        asm volatile ("rjmp bootloader" ::); /* jump to bootloader */
+    /* If SPI_SS is cleared at startup */
+    if (!(PINB & 0x04))
+        /* jump to bootloader */
+#if (BOOTLOADER)
+        asm volatile ("rjmp bootloader" ::);
+#else
+        asm volatile ("rjmp bootloader_start" ::);
 #endif
 #endif
 


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to