Skip to content

Commit 0169915

Browse files
authored
Merge pull request #13998 from MultiTechSystems/mtqn-crash-data-ram
Add crash reporting and autoreboot capability to MTS_DRAGONFLY_L471QG
2 parents 336dd99 + 310b6dd commit 0169915

File tree

4 files changed

+86
-17
lines changed

4 files changed

+86
-17
lines changed

platform/mbed_lib.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,10 @@
238238
"ARM_MUSCA_S1": {
239239
"stdio-convert-newlines": true,
240240
"stdio-baud-rate": 115200
241+
},
242+
"MTS_DRAGONFLY_L471QG": {
243+
"crash-capture-enabled": true,
244+
"fatal-error-auto-reboot-enabled": true
241245
}
242246
}
243247
}

targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L471xG/TOOLCHAIN_ARM/stm32l471xg.sct

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,47 @@
3737
/* Round up VECTORS_SIZE to 8 bytes */
3838
#define VECTORS_SIZE (((NVIC_NUM_VECTORS * 4) + 7) AND ~7)
3939

40-
LR_IROM1 MBED_APP_START MBED_APP_SIZE {
40+
41+
; Crash report enabled as default
42+
#if !defined(MBED_CRASH_REPORT_RAM_SIZE)
43+
#define MBED_CRASH_REPORT_RAM_SIZE 0x100
44+
#endif
45+
46+
;Vectors + Crash report - Fixed at start of RAM2 in sequence
47+
#define MBED_IRAM2_SIZE (MBED_RAM1_SIZE - VECTORS_SIZE - MBED_CRASH_REPORT_RAM_SIZE)
48+
49+
#define MBED_CRASH_REPORT_RAM_START (MBED_RAM1_START + VECTORS_SIZE)
50+
#define MBED_IRAM2_START (MBED_CRASH_REPORT_RAM_START + MBED_CRASH_REPORT_RAM_SIZE)
51+
52+
; Minimum heap should be larger then smallest RAM bank (else can use
53+
; that bank for heap) and less then largest RAM bank.
54+
#define MINIMUM_HEAP 0x12000
55+
56+
;Splitting the RW and ZI section in IRAM1 (MBED_RAM_SIZE-MINIMUM_HEAP = 0x6000 available)
57+
;and IRAM2 (MBED_IRAM2_SIZE = 0x7D78 available)
58+
LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region
4159

4260
ER_IROM1 MBED_APP_START MBED_APP_SIZE {
4361
*.o (RESET, +First)
4462
*(InRoot$$Sections)
4563
.ANY (+RO)
4664
}
4765

48-
RW_IRAM1 MBED_RAM_START (MBED_RAM_SIZE - MBED_CONF_TARGET_BOOT_STACK_SIZE) { ;
66+
RW_m_crash_data MBED_CRASH_REPORT_RAM_START EMPTY MBED_CRASH_REPORT_RAM_SIZE { ; RW data
67+
}
68+
69+
RW_IRAM1 MBED_RAM_START (MBED_RAM_SIZE - MINIMUM_HEAP) { ; RW data
4970
.ANY (+RW +ZI)
5071
}
5172

52-
RW_IRAM2 (MBED_RAM1_START+VECTORS_SIZE) (MBED_RAM1_SIZE-VECTORS_SIZE) { ;
73+
ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (MBED_RAM_START + MBED_RAM_SIZE - MBED_CONF_TARGET_BOOT_STACK_SIZE - AlignExpr(ImageLimit(RW_IRAM1), 16)) {
74+
}
75+
76+
RW_IRAM2 MBED_IRAM2_START MBED_IRAM2_SIZE {
5377
.ANY (+RW +ZI)
5478
}
5579

56-
ARM_LIB_STACK (MBED_RAM_START+MBED_RAM_SIZE) EMPTY -MBED_CONF_TARGET_BOOT_STACK_SIZE { ; stack
80+
ARM_LIB_STACK (MBED_RAM_START + MBED_RAM_SIZE) EMPTY -MBED_CONF_TARGET_BOOT_STACK_SIZE { ; stack
5781
}
5882
}
5983

targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L471xG/TOOLCHAIN_GCC_ARM/stm32l471xg.ld

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#define MBED_APP_SIZE MBED_ROM_SIZE
2727
#endif
2828

29+
M_CRASH_DATA_RAM_SIZE = 0x100;
30+
2931
#if !defined(MBED_CONF_TARGET_BOOT_STACK_SIZE)
3032
/* This value is normally defined by the tools
3133
to 0x1000 for bare metal and 0x400 for RTOS */
@@ -115,6 +117,18 @@ SECTIONS
115117
__etext = .;
116118
_sidata = .;
117119

120+
.crash_data_ram :
121+
{
122+
. = ALIGN(8);
123+
__CRASH_DATA_RAM__ = .;
124+
__CRASH_DATA_RAM_START__ = .; /* Create a global symbol at data start */
125+
KEEP(*(.keep.crash_data_ram))
126+
*(.m_crash_data_ram) /* This is a user defined section */
127+
. += M_CRASH_DATA_RAM_SIZE;
128+
. = ALIGN(8);
129+
__CRASH_DATA_RAM_END__ = .; /* Define a global symbol at data end */
130+
} > SRAM2
131+
118132
/* .stack section doesn't contains any symbols. It is only
119133
* used for linker to reserve space for the isr stack section
120134
* WARNING: .stack should come immediately after the last secure memory
Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
/* Linker script to configure memory regions.
2+
*
3+
* SPDX-License-Identifier: BSD-3-Clause
4+
******************************************************************************
5+
* @attention
6+
*
7+
* Copyright (c) 2016-2020 STMicroelectronics.
8+
* All rights reserved.
9+
*
10+
* This software component is licensed by ST under BSD 3-Clause license,
11+
* the "License"; You may not use this file except in compliance with the
12+
* License. You may obtain a copy of the License at:
13+
* opensource.org/licenses/BSD-3-Clause
14+
*
15+
******************************************************************************
16+
*/
17+
118
if (!isdefinedsymbol(MBED_APP_START)) { define symbol MBED_APP_START = 0x08000000; }
219
if (!isdefinedsymbol(MBED_APP_SIZE)) { define symbol MBED_APP_SIZE = 0x100000; }
320

@@ -6,35 +23,45 @@ define symbol __intvec_start__ = MBED_APP_START;
623
define symbol __region_ROM_start__ = MBED_APP_START;
724
define symbol __region_ROM_end__ = MBED_APP_START + MBED_APP_SIZE - 1;
825

26+
if (!isdefinedsymbol(MBED_CONF_TARGET_BOOT_STACK_SIZE)) {
27+
define symbol MBED_CONF_TARGET_BOOT_STACK_SIZE = 0x400;
28+
}
29+
930
/* [RAM = 96kb + 32kb = 0x20000] */
10-
/* Vector table dynamic copy: Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM */
31+
/* Vector table dynamic copy: Total: 98 vectors * 4 = 392 bytes (0x188) to be reserved in RAM */
1132
define symbol __NVIC_start__ = 0x10000000;
12-
define symbol __NVIC_end__ = 0x10000187; /* Aligned on 8 bytes (392 = 49 x 8) */
13-
define symbol __region_SRAM2_start__ = 0x10000188;
33+
define symbol __NVIC_end__ = 0x10000187;
34+
define symbol __region_CSTACK_start__ = 0x10000188;
35+
define symbol __region_CSTACK_end__ = __region_CSTACK_start__ + MBED_CONF_TARGET_BOOT_STACK_SIZE;
36+
define symbol __region_SRAM2_start__ = __region_CSTACK_end__;
1437
define symbol __region_SRAM2_end__ = 0x10007FFF;
15-
define symbol __region_SRAM1_start__ = 0x20000000;
38+
define symbol __region_CRASH_DATA_RAM_start__ = 0x20000000;
39+
define symbol __region_CRASH_DATA_RAM_end__ = 0x200000FF;
40+
define symbol __region_SRAM1_start__ = 0x20000100;
1641
define symbol __region_SRAM1_end__ = 0x20017FFF;
1742

1843
/* Memory regions */
1944
define memory mem with size = 4G;
2045
define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__];
21-
define region SRAM2_region = mem:[from __region_SRAM2_start__ to __region_SRAM2_end__];
22-
define region SRAM1_region = mem:[from __region_SRAM1_start__ to __region_SRAM1_end__];
46+
define region CSTACK_region = mem:[from __region_CSTACK_start__ to __region_CSTACK_end__];
47+
define region CRASH_DATA_RAM_region = mem:[from __region_CRASH_DATA_RAM_start__ to __region_CRASH_DATA_RAM_end__];
48+
define region RAM_region = mem:[from __region_SRAM2_start__ to __region_SRAM2_end__]
49+
| mem:[from __region_SRAM1_start__ to __region_SRAM1_end__];
2350

24-
if (!isdefinedsymbol(MBED_CONF_TARGET_BOOT_STACK_SIZE)) {
25-
define symbol MBED_CONF_TARGET_BOOT_STACK_SIZE = 0x400;
26-
}
51+
/* Define Crash Data Symbols */
52+
define exported symbol __CRASH_DATA_RAM_START__ = __region_CRASH_DATA_RAM_start__;
53+
define exported symbol __CRASH_DATA_RAM_END__ = __region_CRASH_DATA_RAM_end__;
2754

2855
define symbol __size_cstack__ = MBED_CONF_TARGET_BOOT_STACK_SIZE;
29-
define symbol __size_heap__ = 0x8000;
56+
define symbol __size_heap__ = 0x10000;
3057
define block CSTACK with alignment = 8, size = __size_cstack__ { };
31-
define block HEAP with alignment = 8, size = __size_heap__ { };
58+
define block HEAP with expanding size, alignment = 8, minimum size = __size_heap__ { };
3259

3360
initialize by copy with packing = zeros { readwrite };
3461
do not initialize { section .noinit };
3562

3663
place at address mem:__intvec_start__ { readonly section .intvec };
3764

3865
place in ROM_region { readonly };
39-
place in SRAM1_region { readwrite, block HEAP };
40-
place in SRAM2_region { block CSTACK };
66+
place in CSTACK_region { block CSTACK };
67+
place in RAM_region { block HEAP, readwrite, zeroinit };

0 commit comments

Comments
 (0)