Skip to content

Commit 4e5fe30

Browse files
committed
[NUCLEO_L476RG, DISCO_L476VG]: GCC_ARM, ARM_STD fix RTOS failed,
INIT_STACK used to compute RTOS main stack inconsistant with sp set at reset align heap, stack config with IAR issue: #1845
1 parent f68cdcb commit 4e5fe30

File tree

8 files changed

+22
-25
lines changed

8 files changed

+22
-25
lines changed

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/TOOLCHAIN_ARM_STD/startup_stm32l476xx.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
;
4040
;*******************************************************************************
4141

42-
__initial_sp EQU 0x10008000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
42+
__initial_sp EQU 0x20018000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
4343

4444
PRESERVE8
4545
THUMB

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/TOOLCHAIN_ARM_STD/stm32l476xx.sct

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,11 @@ LR_IROM1 0x08000000 0x100000 { ; load region size_region
3636
.ANY (+RO)
3737
}
3838

39-
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
40-
RW_IRAM1 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
39+
RW_IRAM1 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
4140
.ANY (+RW +ZI)
4241
}
43-
44-
RW_IRAM2 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
42+
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
43+
RW_IRAM2 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
4544
.ANY (+RW +ZI)
4645
}
4746

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/TOOLCHAIN_GCC_ARM/STM32L476XX.ld

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ SECTIONS
112112
__data_end__ = .;
113113
_edata = .;
114114

115-
} > SRAM2
115+
} > SRAM1
116116

117117
.bss :
118118
{
@@ -124,15 +124,15 @@ SECTIONS
124124
. = ALIGN(4);
125125
__bss_end__ = .;
126126
_ebss = .;
127-
} > SRAM2
127+
} > SRAM1
128128

129129
.heap (COPY):
130130
{
131131
__end__ = .;
132132
end = __end__;
133133
*(.heap*)
134134
__HeapLimit = .;
135-
} > SRAM2
135+
} > SRAM1
136136

137137
/* .stack_dummy section doesn't contains any symbols. It is only
138138
* used for linker to calculate size of stack sections, and assign
@@ -144,7 +144,7 @@ SECTIONS
144144

145145
/* Set stack top to end of RAM, and stack limit move down by
146146
* size of stack_dummy section */
147-
__StackTop = ORIGIN(SRAM2) + LENGTH(SRAM2);
147+
__StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
148148
_estack = __StackTop;
149149
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
150150
PROVIDE(__stack = __StackTop);

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
AREA STACK, NOINIT, READWRITE, ALIGN=3
4343
EXPORT __initial_sp
4444

45-
__initial_sp EQU 0x10008000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
45+
__initial_sp EQU 0x20018000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
4646

4747
; <h> Heap Configuration
4848
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,11 @@ LR_IROM1 0x08000000 0x100000 { ; load region size_region
3636
.ANY (+RO)
3737
}
3838

39-
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
40-
RW_IRAM1 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
39+
RW_IRAM1 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
4140
.ANY (+RW +ZI)
4241
}
43-
44-
RW_IRAM2 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
42+
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
43+
RW_IRAM2 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
4544
.ANY (+RW +ZI)
4645
}
4746

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/TOOLCHAIN_ARM_STD/startup_stm32l476xx.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
;
4040
;*******************************************************************************
4141

42-
__initial_sp EQU 0x10008000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
42+
__initial_sp EQU 0x20018000 ; Top of RAM, L4-ECC-SRAM2 retained in standby
4343

4444
PRESERVE8
4545
THUMB

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/TOOLCHAIN_ARM_STD/stm32l476xx.sct

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,12 @@ LR_IROM1 0x08000000 0x100000 { ; load region size_region
3535
*(InRoot$$Sections)
3636
.ANY (+RO)
3737
}
38-
39-
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
40-
RW_IRAM1 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
38+
39+
RW_IRAM1 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
4140
.ANY (+RW +ZI)
4241
}
43-
44-
RW_IRAM2 0x20000000 0x00018000 { ; RW data 96k L4-SRAM1
42+
; Total: 98 vectors = 392 bytes (0x188) to be reserved in RAM
43+
RW_IRAM2 (0x10000000+0x188) (0x08000-0x188) { ; RW data 32k L4-ECC-SRAM2 retained in standby
4544
.ANY (+RW +ZI)
4645
}
4746

hal/targets/cmsis/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/TOOLCHAIN_GCC_ARM/STM32L476XX.ld

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ SECTIONS
112112
__data_end__ = .;
113113
_edata = .;
114114

115-
} > SRAM2
115+
} > SRAM1
116116

117117
.bss :
118118
{
@@ -124,27 +124,27 @@ SECTIONS
124124
. = ALIGN(4);
125125
__bss_end__ = .;
126126
_ebss = .;
127-
} > SRAM2
127+
} > SRAM1
128128

129129
.heap (COPY):
130130
{
131131
__end__ = .;
132132
end = __end__;
133133
*(.heap*)
134134
__HeapLimit = .;
135-
} > SRAM2
135+
} > SRAM1
136136

137137
/* .stack_dummy section doesn't contains any symbols. It is only
138138
* used for linker to calculate size of stack sections, and assign
139139
* values to stack symbols later */
140140
.stack_dummy (COPY):
141141
{
142142
*(.stack*)
143-
} > SRAM2
143+
} > SRAM1
144144

145145
/* Set stack top to end of RAM, and stack limit move down by
146146
* size of stack_dummy section */
147-
__StackTop = ORIGIN(SRAM2) + LENGTH(SRAM2);
147+
__StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
148148
_estack = __StackTop;
149149
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
150150
PROVIDE(__stack = __StackTop);

0 commit comments

Comments
 (0)