From 0ebfb4b33156472a7c1a0186ca2ced42c8874558 Mon Sep 17 00:00:00 2001 From: board707 <50185434+board707@users.noreply.github.com> Date: Tue, 18 Mar 2025 01:29:42 +0300 Subject: [PATCH 1/2] Remove CCMRAM to work --- STM32F4/boards.txt | 2 +- STM32F4/variants/generic_f407v/ld/common.inc | 24 +++----------------- STM32F4/variants/generic_f407v/ld/jtag.ld | 5 +--- 3 files changed, 5 insertions(+), 26 deletions(-) diff --git a/STM32F4/boards.txt b/STM32F4/boards.txt index 22f1aca77..ff5e78db2 100644 --- a/STM32F4/boards.txt +++ b/STM32F4/boards.txt @@ -236,7 +236,7 @@ generic_f407v.upload.maximum_data_size=131072 generic_f407v.build.core=maple generic_f407v.build.f_cpu=168000000 -generic_f407v.build.extra_flags= -DCRYSTAL_FREQ=8 -DLED_BUILTIN=PA6 +generic_f407v.build.extra_flags= -DCRYSTAL_FREQ=8 -DLED_BUILTIN=PA6 -DNO_CCMRAM generic_f407v.build.variant=generic_f407v generic_f407v.build.variant_system_lib=lib_f407.a generic_f407v.build.error_led_pin=PA7 diff --git a/STM32F4/variants/generic_f407v/ld/common.inc b/STM32F4/variants/generic_f407v/ld/common.inc index acaeb3dc6..b73266e8c 100644 --- a/STM32F4/variants/generic_f407v/ld/common.inc +++ b/STM32F4/variants/generic_f407v/ld/common.inc @@ -38,9 +38,9 @@ EXTERN(start_c) /* main entry point */ EXTERN(main) -/* Initial stack pointer value. Relocated to CCMRAM */ +/* Initial stack pointer value. Relocated to RAM */ EXTERN(__msp_init) -PROVIDE(__msp_init = ORIGIN(ccmram) + LENGTH(ccmram)); +PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram)); /* Reset vector and chip reset entry point */ EXTERN(__start__) @@ -140,7 +140,6 @@ SECTIONS . = ALIGN(4); _lm_rom_img_cfgp = .; LONG(LOADADDR(.data)); - LONG(LOADADDR(.ccmdata)); /* * Heap: Linker scripts may choose a custom heap by overriding * _lm_heap_start and _lm_heap_end. Otherwise, the heap is in @@ -150,7 +149,7 @@ SECTIONS * I'm shoving these here naively; there's probably a cleaner way * to go about this. [mbolivar] */ - _lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : __ccmdata_end__; + _lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : __bss_end__; _lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init; } > REGION_RODATA @@ -169,23 +168,6 @@ SECTIONS __data_end__ = .; } > REGION_DATA AT> REGION_RODATA - /* CCM-RAM section - * - * IMPORTANT NOTE! - * The startup code is modified to copy the init-values from flash to ccmram - * at startup - */ - .ccmdata : - { - . = ALIGN(4); - __ccmdata_start__ = .; /* create a global symbol at ccmram start */ - *(.ccmdata) - *(.ccmram*) - - . = ALIGN(4); - __ccmdata_end__ = .; /* create a global symbol at ccmram end */ - } >REGION_CCMRAM AT> REGION_RODATA - /* * .bss */ diff --git a/STM32F4/variants/generic_f407v/ld/jtag.ld b/STM32F4/variants/generic_f407v/ld/jtag.ld index 891e06069..a5fc4de3d 100644 --- a/STM32F4/variants/generic_f407v/ld/jtag.ld +++ b/STM32F4/variants/generic_f407v/ld/jtag.ld @@ -1,11 +1,9 @@ /* - * STM32F4xx high density linker script for - * JTAG (bare metal, no bootloader) builds. + * STM32F411 linker script for JTAG (bare metal, no bootloader) builds. */ MEMORY { - ccmram (rw): ORIGIN = 0x10000000, LENGTH = 64K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K } @@ -16,7 +14,6 @@ REGION_ALIAS("REGION_TEXT", rom); REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_RODATA", rom); -REGION_ALIAS("REGION_CCMRAM", ccmram); _FLASH_BUILD = 1; INCLUDE common.inc From 5f5f75c4ccc12f18a17a559a2a912534b806f593 Mon Sep 17 00:00:00 2001 From: board707 <50185434+board707@users.noreply.github.com> Date: Sat, 22 Mar 2025 17:39:16 +0300 Subject: [PATCH 2/2] Move stack out of CCMRAM --- STM32F4/boards.txt | 2 +- STM32F4/variants/generic_f407v/ld/common.inc | 20 +++++++++++++++++++- STM32F4/variants/generic_f407v/ld/jtag.ld | 5 ++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/STM32F4/boards.txt b/STM32F4/boards.txt index ff5e78db2..22f1aca77 100644 --- a/STM32F4/boards.txt +++ b/STM32F4/boards.txt @@ -236,7 +236,7 @@ generic_f407v.upload.maximum_data_size=131072 generic_f407v.build.core=maple generic_f407v.build.f_cpu=168000000 -generic_f407v.build.extra_flags= -DCRYSTAL_FREQ=8 -DLED_BUILTIN=PA6 -DNO_CCMRAM +generic_f407v.build.extra_flags= -DCRYSTAL_FREQ=8 -DLED_BUILTIN=PA6 generic_f407v.build.variant=generic_f407v generic_f407v.build.variant_system_lib=lib_f407.a generic_f407v.build.error_led_pin=PA7 diff --git a/STM32F4/variants/generic_f407v/ld/common.inc b/STM32F4/variants/generic_f407v/ld/common.inc index b73266e8c..0cbaeaa44 100644 --- a/STM32F4/variants/generic_f407v/ld/common.inc +++ b/STM32F4/variants/generic_f407v/ld/common.inc @@ -38,7 +38,7 @@ EXTERN(start_c) /* main entry point */ EXTERN(main) -/* Initial stack pointer value. Relocated to RAM */ +/* Initial stack pointer value. */ EXTERN(__msp_init) PROVIDE(__msp_init = ORIGIN(ram) + LENGTH(ram)); @@ -140,6 +140,7 @@ SECTIONS . = ALIGN(4); _lm_rom_img_cfgp = .; LONG(LOADADDR(.data)); + LONG(LOADADDR(.ccmdata)); /* * Heap: Linker scripts may choose a custom heap by overriding * _lm_heap_start and _lm_heap_end. Otherwise, the heap is in @@ -168,6 +169,23 @@ SECTIONS __data_end__ = .; } > REGION_DATA AT> REGION_RODATA + /* CCM-RAM section + * + * IMPORTANT NOTE! + * The startup code is modified to copy the init-values from flash to ccmram + * at startup + */ + .ccmdata : + { + . = ALIGN(4); + __ccmdata_start__ = .; /* create a global symbol at ccmram start */ + *(.ccmdata) + *(.ccmram*) + + . = ALIGN(4); + __ccmdata_end__ = .; /* create a global symbol at ccmram end */ + } >REGION_CCMRAM AT> REGION_RODATA + /* * .bss */ diff --git a/STM32F4/variants/generic_f407v/ld/jtag.ld b/STM32F4/variants/generic_f407v/ld/jtag.ld index a5fc4de3d..891e06069 100644 --- a/STM32F4/variants/generic_f407v/ld/jtag.ld +++ b/STM32F4/variants/generic_f407v/ld/jtag.ld @@ -1,9 +1,11 @@ /* - * STM32F411 linker script for JTAG (bare metal, no bootloader) builds. + * STM32F4xx high density linker script for + * JTAG (bare metal, no bootloader) builds. */ MEMORY { + ccmram (rw): ORIGIN = 0x10000000, LENGTH = 64K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K } @@ -14,6 +16,7 @@ REGION_ALIAS("REGION_TEXT", rom); REGION_ALIAS("REGION_DATA", ram); REGION_ALIAS("REGION_BSS", ram); REGION_ALIAS("REGION_RODATA", rom); +REGION_ALIAS("REGION_CCMRAM", ccmram); _FLASH_BUILD = 1; INCLUDE common.inc