diff --git a/bootloader/trampoline.cpp b/bootloader/trampoline.cpp index f4f40db13..4d1013f34 100644 --- a/bootloader/trampoline.cpp +++ b/bootloader/trampoline.cpp @@ -4,6 +4,7 @@ #include #include +#include namespace Bootloader { @@ -30,4 +31,12 @@ void* Trampolines[TRAMPOLINES_COUNT] (void*) strncmp }; -} \ No newline at end of file +void* CustomTrampolines[CUSTOM_TRAMPOLINES_COUNT] + __attribute__((section(".custom_trampolines_table"))) + __attribute__((used)) + = { + (void*) Bootloader::Boot::mode, + (void*) Bootloader::Boot::setMode +}; + +} diff --git a/bootloader/trampoline.h b/bootloader/trampoline.h index 49df37b6f..0bff7a6d2 100644 --- a/bootloader/trampoline.h +++ b/bootloader/trampoline.h @@ -4,9 +4,11 @@ namespace Bootloader { #define TRAMPOLINES_COUNT 13 - extern void* Trampolines[TRAMPOLINES_COUNT]; +#define CUSTOM_TRAMPOLINES_COUNT 2 +extern void* CustomTrampolines[CUSTOM_TRAMPOLINES_COUNT]; + } #endif \ No newline at end of file diff --git a/ion/src/device/n0110/internal_flash.ld b/ion/src/device/n0110/internal_flash.ld index 8f97d4528..924c67f7d 100644 --- a/ion/src/device/n0110/internal_flash.ld +++ b/ion/src/device/n0110/internal_flash.ld @@ -7,6 +7,7 @@ MEMORY { STACK_SIZE = 32K; TRAMPOLINES_OFFSET = 0xE000; +CUSTOM_TRAMPOLINES_OFFSET = 64K - 64; FLASH_SECOND_SECTOR_OFFSET = 16K; FLASH_SECOND_SECTOR_SIZE = 16K; @@ -85,6 +86,11 @@ SECTIONS { KEEP(*(.trampolines_table)); } > INTERNAL_FLASH + .custom_trampolines_table : { + . = ORIGIN(INTERNAL_FLASH) + CUSTOM_TRAMPOLINES_OFFSET; + KEEP(*(.custom_trampolines_table)); + } > INTERNAL_FLASH + .bss : { /* The bss section contains data for all uninitialized variables * So like the .data section, it will go in RAM, but unlike the data section