@@ -49,8 +49,12 @@ Arm linker script template:
49
49
#define MBED_APP_SIZE ROM_SIZE
50
50
#endif
51
51
52
+ #if !defined(MBED_BOOT_STACK_SIZE)
53
+ #define MBED_BOOT_STACK_SIZE 0x1000
54
+ #endif
55
+
52
56
/* Round up VECTORS_SIZE to 8 bytes */
53
- #define VECTORS_SIZE (((VECTORS * 4) + 7) & ~7)
57
+ #define VECTORS_SIZE (((VECTORS * 4) + 7) AND ~7)
54
58
55
59
LR_IROM1 MBED_APP_START MBED_APP_SIZE {
56
60
@@ -60,9 +64,11 @@ LR_IROM1 MBED_APP_START MBED_APP_SIZE {
60
64
.ANY (+RO)
61
65
}
62
66
63
- RW_IRAM1 (RAM_START + VECTORS_SIZE) (RAM_SIZE - VECTORS_SIZE) { ; RW data
67
+ RW_IRAM1 (RAM_START + VECTORS_SIZE) (RAM_SIZE - VECTORS_SIZE - MBED_BOOT_STACK_SIZE ) { ; RW data
64
68
.ANY (+RW +ZI)
65
69
}
70
+ ARM_LIB_STACK (RAM_START + RAM_SIZE) EMPTY -MBED_BOOT_STACK_SIZE { ; Stack region growing down
71
+ }
66
72
}
67
73
```
68
74
@@ -88,17 +94,20 @@ if (!isdefinedsymbol(MBED_APP_SIZE)) {
88
94
define symbol MBED_APP_SIZE = ROM_SIZE;
89
95
}
90
96
97
+ if (!isdefinedsymbol(MBED_BOOT_STACK_SIZE)) {
98
+ define symbol MBED_BOOT_STACK_SIZE = 0x1000;
99
+ }
100
+
91
101
/* Round up VECTORS_SIZE to 8 bytes */
92
102
define symbol VECTORS_SIZE = ((VECTORS * 4) + 7) & ~7;
93
103
define symbol RAM_REGION_START = RAM_START + VECTORS_SIZE;
94
104
define symbol RAM_REGION_SIZE = RAM_SIZE - VECTORS_SIZE;
95
- define symbol ISR_STACK_SIZE = 0x400;
96
105
97
106
define memory mem with size = 4G;
98
107
define region ROM_region = mem:[from MBED_APP_START size MBED_APP_SIZE];
99
108
define region RAM_region = mem:[from RAM_REGION_START size RAM_REGION_SIZE];
100
109
101
- define block CSTACK with alignment = 8, size = ISR_STACK_SIZE { };
110
+ define block CSTACK with alignment = 8, size = MBED_BOOT_STACK_SIZE { };
102
111
define block HEAP with alignment = 8, size = HEAP_SIZE { };
103
112
104
113
initialize by copy { readwrite };
@@ -133,6 +142,10 @@ GCC linker script template:
133
142
#define MBED_APP_SIZE ROM_SIZE
134
143
#endif
135
144
145
+ #if !defined(MBED_BOOT_STACK_SIZE)
146
+ #define MBED_BOOT_STACK_SIZE 0x1000
147
+ #endif
148
+
136
149
/* Round up VECTORS_SIZE to 8 bytes */
137
150
#define VECTORS_SIZE (((VECTORS * 4) + 7) & 0xFFFFFFF8)
138
151
@@ -265,6 +278,7 @@ SECTIONS
265
278
__end__ = .;
266
279
PROVIDE(end = .);
267
280
*(.heap*)
281
+ . = ORIGIN(RAM) + LENGTH(RAM) - MBED_BOOT_STACK_SIZE;
268
282
__HeapLimit = .;
269
283
} > RAM
270
284
@@ -279,7 +293,7 @@ SECTIONS
279
293
/* Set stack top to end of RAM, and stack limit move down by
280
294
* size of stack_dummy section */
281
295
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
282
- __StackLimit = __StackTop - SIZEOF(.stack_dummy) ;
296
+ __StackLimit = __StackTop - MBED_BOOT_STACK_SIZE ;
283
297
PROVIDE(__stack = __StackTop);
284
298
285
299
/* Check if data + heap + stack exceeds RAM limit */
0 commit comments