From cac9d7930cd65e2e833c32f322691cd105f2f233 Mon Sep 17 00:00:00 2001 From: Hugues Kamba Date: Fri, 12 Feb 2021 12:02:35 +0000 Subject: [PATCH] Apollo3: Fix run time error due to memory mapping The Appollo3 targets require dummy sections in stack and heap regions. The stack dummy section does not contain any symbols. It is only used for the linker to calculate the size of the stack sections and assign values to stack symbols later. The heap dummy region is used to identify the beginning of available dynamic memory. --- .../TOOLCHAIN_ARM_STD/AMA3B1KK.sct | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct index cc2bc7e7d6..d0e4dba68b 100644 --- a/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct +++ b/targets/TARGET_Ambiq_Micro/TARGET_Apollo3/TOOLCHAIN_ARM_STD/AMA3B1KK.sct @@ -1,7 +1,7 @@ #! armclang -E --target=arm-arm-none-eabi -x c -mcpu=cortex-m4 ; -; Copyright (c) 2019-2020 SparkFun Electronics +; Copyright (c) 2019-2021 SparkFun Electronics ; SPDX-License-Identifier: MIT ; ; Permission is hereby granted, free of charge, to any person obtaining a copy @@ -40,7 +40,18 @@ #define MBED_RAM0_SIZE 0x100 #define MBED_RAM1_START (MBED_RAM0_START + MBED_RAM0_SIZE) #define MBED_RAM1_SIZE (MBED_RAM_SIZE - (MBED_RAM0_SIZE)) +; This section does not contain any symbols. It is only used for the linker +; to calculate the size of the stack sections and assign values to stack +; symbols later +#define STACK_DUMMY_START (MBED_RAM1_START + MBED_RAM1_SIZE) +#define STACK_DUMMY_SIZE 0x8 +#define Stack_Start (STACK_DUMMY_START - STACK_DUMMY_SIZE) #define Stack_Size MBED_CONF_TARGET_BOOT_STACK_SIZE +; The heap dummy section is used to identify the beginning of available dynamic memory. +#define HEAP_DUMMY_SIZE 0x8 +#define Heap_Start AlignExpr(+0, 16) +#define Heap_Size (MBED_RAM_SIZE - RAM_FIXED_SIZE + MBED_RAM1_START - AlignExpr(ImageLimit(RW_IRAM1), 16) - HEAP_DUMMY_SIZE) + #define RAM_FIXED_SIZE (MBED_CONF_TARGET_BOOT_STACK_SIZE+MBED_RAM0_SIZE) @@ -56,8 +67,8 @@ LR_IROM1 MBED_APP_START MBED_APP_SIZE { RW_IRAM1 MBED_RAM1_START MBED_RAM1_SIZE { .ANY (+RW +ZI) } - ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_SIZE-RAM_FIXED_SIZE+MBED_RAM1_START-AlignExpr(ImageLimit(RW_IRAM1), 16)) { + ARM_LIB_HEAP Heap_Start EMPTY Heap_Size { ; Heap region growing up } - ARM_LIB_STACK MBED_RAM1_START+MBED_RAM1_SIZE EMPTY -Stack_Size { ; Stack region growing down + ARM_LIB_STACK Stack_Start EMPTY -Stack_Size { ; Stack region growing down } }