diff --git a/src/link/stm32_flash_f405.ld b/src/link/stm32_flash_f405.ld index 4658828ac5..4920114c93 100644 --- a/src/link/stm32_flash_f405.ld +++ b/src/link/stm32_flash_f405.ld @@ -37,4 +37,8 @@ REGION_ALIAS("STACKRAM", CCM) REGION_ALIAS("FASTRAM", CCM) REGION_ALIAS("VECTAB", RAM) -INCLUDE "stm32_flash_split.ld" +/* Put various bits and bobs of data into the main chunk of flash as we have enough of it */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH1) + +INCLUDE "stm32_flash_f4_split.ld" diff --git a/src/link/stm32_flash_f405_opbl.ld b/src/link/stm32_flash_f405_opbl.ld index aabc0de09f..08ba23e761 100644 --- a/src/link/stm32_flash_f405_opbl.ld +++ b/src/link/stm32_flash_f405_opbl.ld @@ -34,4 +34,8 @@ MEMORY REGION_ALIAS("STACKRAM", CCM) REGION_ALIAS("FASTRAM", CCM) -INCLUDE "stm32_flash_split.ld" +/* Put various bits and bobs of data into the main chunk of flash as we have enough of it */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH1) + +INCLUDE "stm32_flash_f4_split.ld" diff --git a/src/link/stm32_flash_f411.ld b/src/link/stm32_flash_f411.ld index b5275e2966..98555ce42a 100644 --- a/src/link/stm32_flash_f411.ld +++ b/src/link/stm32_flash_f411.ld @@ -36,4 +36,8 @@ REGION_ALIAS("STACKRAM", RAM) REGION_ALIAS("FASTRAM", RAM) REGION_ALIAS("VECTAB", RAM) -INCLUDE "stm32_flash_split.ld" +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH) + +INCLUDE "stm32_flash_f4_split.ld" diff --git a/src/link/stm32_flash_f411_opbl.ld b/src/link/stm32_flash_f411_opbl.ld index 61cf5a1a8b..a064478834 100644 --- a/src/link/stm32_flash_f411_opbl.ld +++ b/src/link/stm32_flash_f411_opbl.ld @@ -33,4 +33,8 @@ MEMORY REGION_ALIAS("STACKRAM", RAM) REGION_ALIAS("FASTRAM", RAM) -INCLUDE "stm32_flash_split.ld" +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH) + +INCLUDE "stm32_flash_f4_split.ld" diff --git a/src/link/stm32_flash_f446.ld b/src/link/stm32_flash_f446.ld index d40a39042b..07f5cdf9f1 100644 --- a/src/link/stm32_flash_f446.ld +++ b/src/link/stm32_flash_f446.ld @@ -34,4 +34,8 @@ REGION_ALIAS("STACKRAM", RAM) REGION_ALIAS("FASTRAM", RAM) REGION_ALIAS("VECTAB", RAM) -INCLUDE "stm32_flash_split.ld" +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH) + +INCLUDE "stm32_flash_f4_split.ld" diff --git a/src/link/stm32_flash_split.ld b/src/link/stm32_flash_f4_split.ld similarity index 97% rename from src/link/stm32_flash_split.ld rename to src/link/stm32_flash_f4_split.ld index 63100c039b..b54009d035 100644 --- a/src/link/stm32_flash_split.ld +++ b/src/link/stm32_flash_f4_split.ld @@ -1,7 +1,7 @@ /* ***************************************************************************** ** -** File : stm32_flash_split.ld +** File : stm32_flash_f4_split.ld ** ** Abstract : Common linker script for STM32 devices. ** @@ -80,35 +80,35 @@ SECTIONS __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; - } >FLASH + } >MOVABLE_FLASH .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); - } >FLASH + } >MOVABLE_FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); - } >FLASH + } >MOVABLE_FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(.fini_array*)) KEEP (*(SORT(.fini_array.*))) PROVIDE_HIDDEN (__fini_array_end = .); - } >FLASH + } >MOVABLE_FLASH .pg_registry : { PROVIDE_HIDDEN (__pg_registry_start = .); KEEP (*(.pg_registry)) KEEP (*(SORT(.pg_registry.*))) PROVIDE_HIDDEN (__pg_registry_end = .); - } >FLASH + } >MOVABLE_FLASH .pg_resetdata : { PROVIDE_HIDDEN (__pg_resetdata_start = .); @@ -144,7 +144,7 @@ SECTIONS . = ALIGN(4); _edata = .; /* define a global symbol at data end */ - } >RAM AT> FLASH + } >RAM AT> MOVABLE_FLASH /* Uninitialized data section */ . = ALIGN(4); diff --git a/src/link/stm32_flash_f722.ld b/src/link/stm32_flash_f722.ld index 64774102e4..8e6d75dbdc 100644 --- a/src/link/stm32_flash_f722.ld +++ b/src/link/stm32_flash_f722.ld @@ -21,6 +21,7 @@ MEMORY { ITCM_RAM (rx) : ORIGIN = 0x00000000, LENGTH = 16K +/* Alternate access to the same flash storage as AXIM flash, but not writable by the boot loader. */ ITCM_FLASH (rx) : ORIGIN = 0x00200000, LENGTH = 16K ITCM_FLASH_CONFIG (r) : ORIGIN = 0x00204000, LENGTH = 16K ITCM_FLASH1 (rx) : ORIGIN = 0x00208000, LENGTH = 480K @@ -39,14 +40,19 @@ MEMORY } REGION_ALIAS("FLASH", AXIM_FLASH) +REGION_ALIAS("WRITABLE_FLASH", AXIM_FLASH) REGION_ALIAS("FLASH_CUSTOM_DEFAULTS", AXIM_FLASH_CUSTOM_DEFAULTS) REGION_ALIAS("FLASH_CONFIG", AXIM_FLASH_CONFIG) -REGION_ALIAS("FLASH_OVERFLOW", AXIM_FLASH1) REGION_ALIAS("FLASH1", AXIM_FLASH1) +REGION_ALIAS("WRITABLE_FLASH1", AXIM_FLASH1) REGION_ALIAS("FLASH_CUSTOM_DEFAULTS_EXTENDED", AXIM_FLASH_CUSTOM_DEFAULTS_EXTENDED) REGION_ALIAS("STACKRAM", DTCM_RAM) REGION_ALIAS("FASTRAM", DTCM_RAM) REGION_ALIAS("RAM", SRAM1) +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", AXIM_FLASH) + INCLUDE "stm32_flash_f7_split.ld" diff --git a/src/link/stm32_flash_f74x.ld b/src/link/stm32_flash_f74x.ld index 4ae494f9ed..bf066366a0 100644 --- a/src/link/stm32_flash_f74x.ld +++ b/src/link/stm32_flash_f74x.ld @@ -23,13 +23,14 @@ MEMORY { ITCM_RAM (rx) : ORIGIN = 0x00000000, LENGTH = 16K +/* Alternate access to the same flash storage as AXIM flash, but not writable by the boot loader. */ ITCM_FLASH (rx) : ORIGIN = 0x00200000, LENGTH = 32K ITCM_FLASH_CONFIG (r) : ORIGIN = 0x00208000, LENGTH = 32K ITCM_FLASH1 (rx) : ORIGIN = 0x00210000, LENGTH = 960K AXIM_FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 10K AXIM_FLASH_CUSTOM_DEFAULTS (r) : ORIGIN = 0x08002800, LENGTH = 10K - AXIM_FLASH_OVERFLOW (r) : ORIGIN = 0x08005000, LENGTH = 12K + AXIM_FLASH_UNUSED (r) : ORIGIN = 0x08005000, LENGTH = 12K /* config occupies the entire flash sector 1 for the ease of erasure, 32K on F74x */ AXIM_FLASH_CONFIG (r) : ORIGIN = 0x08008000, LENGTH = 32K AXIM_FLASH1 (rx) : ORIGIN = 0x08010000, LENGTH = DEFINED(USE_CUSTOM_DEFAULTS_EXTENDED) ? 928K : 960K @@ -42,14 +43,19 @@ MEMORY } REGION_ALIAS("FLASH", ITCM_FLASH) -REGION_ALIAS("FLASH_OVERFLOW", AXIM_FLASH_OVERFLOW) +REGION_ALIAS("WRITABLE_FLASH", AXIM_FLASH) REGION_ALIAS("FLASH_CUSTOM_DEFAULTS", AXIM_FLASH_CUSTOM_DEFAULTS) REGION_ALIAS("FLASH_CONFIG", AXIM_FLASH_CONFIG) REGION_ALIAS("FLASH1", ITCM_FLASH1) +REGION_ALIAS("WRITABLE_FLASH1", AXIM_FLASH1) REGION_ALIAS("FLASH_CUSTOM_DEFAULTS_EXTENDED", AXIM_FLASH_CUSTOM_DEFAULTS_EXTENDED) REGION_ALIAS("STACKRAM", DTCM_RAM) REGION_ALIAS("FASTRAM", DTCM_RAM) REGION_ALIAS("RAM", SRAM1) +/* Put various bits and bobs of data into the main chunk of flash as we have enough of it */ + +REGION_ALIAS("MOVABLE_FLASH", AXIM_FLASH1) + INCLUDE "stm32_flash_f7_split.ld" diff --git a/src/link/stm32_flash_f765.ld b/src/link/stm32_flash_f765.ld index 089069482e..65b2f922ad 100644 --- a/src/link/stm32_flash_f765.ld +++ b/src/link/stm32_flash_f765.ld @@ -23,13 +23,14 @@ MEMORY { ITCM_RAM (rx) : ORIGIN = 0x00000000, LENGTH = 16K +/* Alternate access to the same flash storage as AXIM flash, but not writable by the boot loader. */ ITCM_FLASH (rx) : ORIGIN = 0x00200000, LENGTH = 32K ITCM_FLASH_CONFIG (r) : ORIGIN = 0x00208000, LENGTH = 32K ITCM_FLASH1 (rx) : ORIGIN = 0x00210000, LENGTH = 1984K AXIM_FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 10K AXIM_FLASH_CUSTOM_DEFAULTS (r) : ORIGIN = 0x08002800, LENGTH = 10K - AXIM_FLASH_OVERFLOW (r) : ORIGIN = 0x08005000, LENGTH = 12K + AXIM_FLASH_UNUSED (r) : ORIGIN = 0x08005000, LENGTH = 12K AXIM_FLASH_CONFIG (r) : ORIGIN = 0x08008000, LENGTH = 32K AXIM_FLASH1 (rx) : ORIGIN = 0x08010000, LENGTH = 1984K @@ -39,14 +40,19 @@ MEMORY MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K } -REGION_ALIAS("FLASH", AXIM_FLASH) -REGION_ALIAS("FLASH_OVERFLOW", AXIM_FLASH_OVERFLOW) +REGION_ALIAS("FLASH", ITCM_FLASH) +REGION_ALIAS("WRITABLE_FLASH", AXIM_FLASH) REGION_ALIAS("FLASH_CUSTOM_DEFAULTS", AXIM_FLASH_CUSTOM_DEFAULTS) REGION_ALIAS("FLASH_CONFIG", AXIM_FLASH_CONFIG) -REGION_ALIAS("FLASH1", AXIM_FLASH1) +REGION_ALIAS("FLASH1", ITCM_FLASH1) +REGION_ALIAS("WRITABLE_FLASH1", AXIM_FLASH1) REGION_ALIAS("STACKRAM", DTCM_RAM) REGION_ALIAS("FASTRAM", DTCM_RAM) REGION_ALIAS("RAM", DTCM_RAM) +/* Put various bits and bobs of data into the main chunk of flash as we have enough of it */ + +REGION_ALIAS("MOVABLE_FLASH", AXIM_FLASH1) + INCLUDE "stm32_flash_f7_split.ld" diff --git a/src/link/stm32_flash_f7_split.ld b/src/link/stm32_flash_f7_split.ld index de56d239b6..c362b09128 100644 --- a/src/link/stm32_flash_f7_split.ld +++ b/src/link/stm32_flash_f7_split.ld @@ -32,7 +32,7 @@ SECTIONS PROVIDE (isr_vector_table_base = .); KEEP(*(.isr_vector)) /* Startup code */ . = ALIGN(4); - } >FLASH AT >AXIM_FLASH + } >FLASH AT >WRITABLE_FLASH /* The program code and other data goes into FLASH */ .text : @@ -51,7 +51,7 @@ SECTIONS . = ALIGN(4); _etext = .; /* define a global symbols at end of code */ - } >FLASH1 AT >AXIM_FLASH1 + } >FLASH1 AT >WRITABLE_FLASH1 /* Critical program code goes into ITCM RAM */ /* Copy specific fast-executing code to ITCM RAM */ @@ -64,18 +64,18 @@ SECTIONS *(.tcm_code*) . = ALIGN(4); tcm_code_end = .; - } >ITCM_RAM AT >AXIM_FLASH1 + } >ITCM_RAM AT >WRITABLE_FLASH1 .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) - } >FLASH + } >MOVABLE_FLASH .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; - } >FLASH AT >AXIM_FLASH + } >MOVABLE_FLASH .pg_registry : { @@ -83,14 +83,14 @@ SECTIONS KEEP (*(.pg_registry)) KEEP (*(SORT(.pg_registry.*))) PROVIDE_HIDDEN (__pg_registry_end = .); - } >FLASH AT >AXIM_FLASH + } >MOVABLE_FLASH .pg_resetdata : { PROVIDE_HIDDEN (__pg_resetdata_start = .); KEEP (*(.pg_resetdata)) PROVIDE_HIDDEN (__pg_resetdata_end = .); - } >FLASH_OVERFLOW + } >FLASH1 AT >WRITABLE_FLASH1 /* Storage for the address for the configuration section so we can grab it out of the hex file */ .custom_defaults : @@ -120,7 +120,7 @@ SECTIONS . = ALIGN(4); _edata = .; /* define a global symbol at data end */ - } >RAM AT >AXIM_FLASH1 + } >RAM AT >WRITABLE_FLASH1 /* Uninitialized data section */ . = ALIGN(4); @@ -166,7 +166,7 @@ SECTIONS . = ALIGN(4); _efastram_data = .; /* define a global symbol at data end */ - } >FASTRAM AT >AXIM_FLASH1 + } >FASTRAM AT >WRITABLE_FLASH1 . = ALIGN(4); .fastram_bss (NOLOAD) : diff --git a/src/link/stm32_flash_g474.ld b/src/link/stm32_flash_g474.ld index 2635809dd3..08db35f51d 100644 --- a/src/link/stm32_flash_g474.ld +++ b/src/link/stm32_flash_g474.ld @@ -35,4 +35,8 @@ REGION_ALIAS("STACKRAM", CCM) REGION_ALIAS("FASTRAM", CCM) REGION_ALIAS("VECTAB", CCM) -INCLUDE "stm32_flash_split_g4.ld" +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", FLASH) + +INCLUDE "stm32_flash_g4_split.ld" diff --git a/src/link/stm32_flash_split_g4.ld b/src/link/stm32_flash_g4_split.ld similarity index 98% rename from src/link/stm32_flash_split_g4.ld rename to src/link/stm32_flash_g4_split.ld index 5b6f363a02..804ad6d155 100644 --- a/src/link/stm32_flash_split_g4.ld +++ b/src/link/stm32_flash_g4_split.ld @@ -1,7 +1,7 @@ /* ***************************************************************************** ** -** File : stm32_flash_split.ld +** File : stm32_flash_g4_split.ld ** ** Abstract : Common linker script for STM32 devices. ** @@ -75,12 +75,15 @@ SECTIONS } >FLASH1 - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM.extab : { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >MOVABLE_FLASH + .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; - } >FLASH + } >MOVABLE_FLASH .preinit_array : { diff --git a/src/link/stm32_flash_h743_2m.ld b/src/link/stm32_flash_h743_2m.ld index 47f8132b8a..911e482fba 100644 --- a/src/link/stm32_flash_h743_2m.ld +++ b/src/link/stm32_flash_h743_2m.ld @@ -38,7 +38,9 @@ ENTRY(Reset_Handler) MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 10K - FLASH_CUSTOM_DEFAULTS (r) : ORIGIN = 0x08002800, LENGTH = 118K + FLASH_CUSTOM_DEFAULTS (r) : ORIGIN = 0x08002800, LENGTH = 10K + FLASH_UNUSED (r) : ORIGIN = 0x08005000, LENGTH = 108K + FLASH_CONFIG (r) : ORIGIN = 0x08020000, LENGTH = 128K FLASH1 (rx) : ORIGIN = 0x08040000, LENGTH = DEFINED(USE_CUSTOM_DEFAULTS_EXTENDED) ? 1664K : 1792K FLASH_CUSTOM_DEFAULTS_EXTENDED (r): ORIGIN = DEFINED(USE_CUSTOM_DEFAULTS_EXTENDED) ? 0x081E0000 : 0x08200000, LENGTH = DEFINED(USE_CUSTOM_DEFAULTS_EXTENDED) ? 128K : 0K @@ -55,17 +57,6 @@ MEMORY REGION_ALIAS("STACKRAM", DTCM_RAM) REGION_ALIAS("FASTRAM", DTCM_RAM) -/* INCLUDE "stm32_flash_f7_split.ld" */ -/* -***************************************************************************** -** -** File : stm32_flash_f7_split.ld -** -** Abstract : Common linker script for STM32 devices. -** -***************************************************************************** -*/ - /* Entry Point */ ENTRY(Reset_Handler) @@ -127,13 +118,13 @@ SECTIONS .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) - } >FLASH + } >FLASH1 .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; - } >FLASH + } >FLASH1 .pg_registry : { @@ -178,7 +169,7 @@ SECTIONS . = ALIGN(4); _edata = .; /* define a global symbol at data end */ - } >RAM AT >FLASH + } >RAM AT >FLASH1 /* Uninitialized data section */ . = ALIGN(4); @@ -224,7 +215,7 @@ SECTIONS . = ALIGN(4); _efastram_data = .; /* define a global symbol at data end */ - } >FASTRAM AT >FLASH + } >FASTRAM AT >FLASH1 . = ALIGN(4); .fastram_bss (NOLOAD) : @@ -253,7 +244,7 @@ SECTIONS *(.dmaram_data*) /* .data* sections */ . = ALIGN(32); _edmaram_data = .; /* define a global symbol at data end */ - } >RAM AT >FLASH + } >RAM AT >FLASH1 . = ALIGN(32); .dmaram_bss (NOLOAD) : diff --git a/src/link/stm32_h750_common_post.ld b/src/link/stm32_h750_common_post.ld index 4874f75b3a..89b4224806 100644 --- a/src/link/stm32_h750_common_post.ld +++ b/src/link/stm32_h750_common_post.ld @@ -41,4 +41,4 @@ SECTIONS } .ARM.attributes 0 : { *(.ARM.attributes) } -} \ No newline at end of file +} diff --git a/src/link/stm32_ram_h750_exst_post.ld b/src/link/stm32_ram_h750_exst_post.ld index ea55d54a94..97ed6c28f3 100644 --- a/src/link/stm32_ram_h750_exst_post.ld +++ b/src/link/stm32_ram_h750_exst_post.ld @@ -26,4 +26,4 @@ SECTIONS . = ORIGIN(EXST_HASH) + LENGTH(EXST_HASH); __firmware_end__ = .; } >EXST_HASH -} \ No newline at end of file +} diff --git a/src/main/target/KISSFCV2F7/stm32_flash_f722_no_split.ld b/src/main/target/KISSFCV2F7/stm32_flash_f722_kissfcv2f7.ld similarity index 83% rename from src/main/target/KISSFCV2F7/stm32_flash_f722_no_split.ld rename to src/main/target/KISSFCV2F7/stm32_flash_f722_kissfcv2f7.ld index ac09a4c48a..b18d535b57 100644 --- a/src/main/target/KISSFCV2F7/stm32_flash_f722_no_split.ld +++ b/src/main/target/KISSFCV2F7/stm32_flash_f722_kissfcv2f7.ld @@ -37,15 +37,18 @@ MEMORY MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K } -REGION_ALIAS("ITCM_FLASH1", ITCM_FLASH) -REGION_ALIAS("AXIM_FLASH1", AXIM_FLASH) - REGION_ALIAS("FLASH", AXIM_FLASH) +REGION_ALIAS("WRITABLE_FLASH", AXIM_FLASH) REGION_ALIAS("FLASH_CONFIG", AXIM_FLASH_CONFIG) -REGION_ALIAS("FLASH1", AXIM_FLASH1) +REGION_ALIAS("FLASH1", AXIM_FLASH) +REGION_ALIAS("WRITABLE_FLASH1", AXIM_FLASH) REGION_ALIAS("STACKRAM", DTCM_RAM) REGION_ALIAS("FASTRAM", DTCM_RAM) REGION_ALIAS("RAM", SRAM1) +/* Put various bits and bobs of data into the free space after the vector table in sector 0 to save flash space. */ + +REGION_ALIAS("MOVABLE_FLASH", AXIM_FLASH) + INCLUDE "stm32_flash_f7_split.ld" diff --git a/src/main/target/KISSFCV2F7/target.mk b/src/main/target/KISSFCV2F7/target.mk index 7101dd1221..a8c2d13174 100644 --- a/src/main/target/KISSFCV2F7/target.mk +++ b/src/main/target/KISSFCV2F7/target.mk @@ -1,5 +1,5 @@ F7X2RE_TARGETS += $(TARGET) -LD_SCRIPT = $(ROOT)/src/main/target/$(TARGET)/stm32_flash_f722_no_split.ld +LD_SCRIPT = $(ROOT)/src/main/target/$(TARGET)/stm32_flash_f722_kissfcv2f7.ld CFLAGS += -DCLOCK_SOURCE_USE_HSI TARGET_SRC = \