diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2012-04-14 10:09:45 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2012-04-14 10:09:45 +0000 |
commit | e8570c4a37e41117e3fd1e989e0b41f1e9608f3c (patch) | |
tree | 8aab63b2dd5fa938f7507c2938ca4be5f046b43b /Bootloaders/DFU | |
parent | a19dc3d20cd5c80adb80b1bd6f5126075911f411 (diff) | |
download | lufa-e8570c4a37e41117e3fd1e989e0b41f1e9608f3c.tar.gz lufa-e8570c4a37e41117e3fd1e989e0b41f1e9608f3c.tar.bz2 lufa-e8570c4a37e41117e3fd1e989e0b41f1e9608f3c.zip |
Fixed CDC and DFU bootloaders failing to compile when the bootloader section size is 8KB or more (thanks to Georg Glock).
Diffstat (limited to 'Bootloaders/DFU')
-rw-r--r-- | Bootloaders/DFU/BootloaderAPITable.S | 48 | ||||
-rw-r--r-- | Bootloaders/DFU/makefile | 2 |
2 files changed, 35 insertions, 15 deletions
diff --git a/Bootloaders/DFU/BootloaderAPITable.S b/Bootloaders/DFU/BootloaderAPITable.S index 1ce125e21..0935aca77 100644 --- a/Bootloaders/DFU/BootloaderAPITable.S +++ b/Bootloaders/DFU/BootloaderAPITable.S @@ -31,25 +31,45 @@ ; Bootloader API Jump Table .section .apitable, "ax" -; API function jump table +; Trampolines to actual API implementations if the target address is outside the +; range of a rjmp instruction (can happen with large bootloader sections) .org 0 +BootloaderAPI_ErasePage_Trampoline: + jmp BootloaderAPI_ErasePage +BootloaderAPI_WritePage_Trampoline: + jmp BootloaderAPI_WritePage +BootloaderAPI_FillWord_Trampoline: + jmp BootloaderAPI_FillWord +BootloaderAPI_ReadSignature_Trampoline: + jmp BootloaderAPI_ReadSignature +BootloaderAPI_ReadFuse_Trampoline: + jmp BootloaderAPI_ReadFuse +BootloaderAPI_ReadLock_Trampoline: + jmp BootloaderAPI_ReadLock +BootloaderAPI_WriteLock_Trampoline: + jmp BootloaderAPI_WriteLock +BootloaderAPU_UNUSED: + ret + +; API function jump table +.org (96 - 32) .global BootloaderAPI_JumpTable BootloaderAPI_JumpTable: - rjmp BootloaderAPI_ErasePage - rjmp BootloaderAPI_WritePage - rjmp BootloaderAPI_FillWord - rjmp BootloaderAPI_ReadSignature - rjmp BootloaderAPI_ReadFuse - rjmp BootloaderAPI_ReadLock - rjmp BootloaderAPI_WriteLock - nop ; UNUSED ENTRY - nop ; UNUSED ENTRY - nop ; UNUSED ENTRY - nop ; UNUSED ENTRY - ret + rjmp BootloaderAPI_ErasePage_Trampoline + rjmp BootloaderAPI_WritePage_Trampoline + rjmp BootloaderAPI_FillWord_Trampoline + rjmp BootloaderAPI_ReadSignature_Trampoline + rjmp BootloaderAPI_ReadFuse_Trampoline + rjmp BootloaderAPI_ReadLock_Trampoline + rjmp BootloaderAPI_WriteLock_Trampoline + rjmp BootloaderAPU_UNUSED ; UNUSED ENTRY + rjmp BootloaderAPU_UNUSED ; UNUSED ENTRY + rjmp BootloaderAPU_UNUSED ; UNUSED ENTRY + rjmp BootloaderAPU_UNUSED ; UNUSED ENTRY + rjmp BootloaderAPU_UNUSED ; UNUSED ENTRY ; Bootloader table signatures and information -.org (32 - 8) +.org (96 - 8) BootloaderAPI_Signatures: .global BootloaderAPI_Signatures .long BOOT_START_ADDR ; Start address of the bootloader diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile index d23c53ab0..608564ebe 100644 --- a/Bootloaders/DFU/makefile +++ b/Bootloaders/DFU/makefile @@ -102,7 +102,7 @@ BOOT_SECTION_SIZE_KB = 4 # API jump table (for more information on the latter, see the bootloader documentation). These formulas # should not need to be altered - modify the FLASH_SIZE_KB and BOOT_SECTION_KB values above instead. BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc) -BOOT_API_TABLESTART = 0x$(shell echo "obase=16; (($(FLASH_SIZE_KB) * 1024) - 32)" | bc) +BOOT_API_TABLESTART = 0x$(shell echo "obase=16; (($(FLASH_SIZE_KB) * 1024) - 96)" | bc) # Output format. (can be srec, ihex, binary) |