mirror of https://github.com/ARMmbed/mbed-os.git
Change STM32L475/76/86 GCC_ARM linker files to have HEAP in SRAM1 and stack in SRAM2 (after the interrupt vector)
parent
0efc876bb4
commit
02b2b01a83
|
@ -139,24 +139,29 @@ SECTIONS
|
||||||
__end__ = .;
|
__end__ = .;
|
||||||
end = __end__;
|
end = __end__;
|
||||||
*(.heap*)
|
*(.heap*)
|
||||||
|
. += (ORIGIN(SRAM1) + LENGTH(SRAM1) - .);
|
||||||
__HeapLimit = .;
|
__HeapLimit = .;
|
||||||
} > SRAM1
|
} > SRAM1
|
||||||
|
PROVIDE(__heap_size = SIZEOF(.heap));
|
||||||
|
PROVIDE(__mbed_sbrk_start = ADDR(.heap));
|
||||||
|
PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap));
|
||||||
|
/* Check if data + heap exceeds RAM1 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM1)+LENGTH(SRAM1)) >= __HeapLimit, "SRAM1 overflow")
|
||||||
/* .stack_dummy section doesn't contains any symbols. It is only
|
/* .stack_dummy section doesn't contains any symbols. It is only
|
||||||
* used for linker to calculate size of stack sections, and assign
|
* used for linker to calculate size of stack sections, and assign
|
||||||
* values to stack symbols later */
|
* values to stack symbols later */
|
||||||
.stack_dummy (COPY):
|
.stack_dummy (COPY):
|
||||||
{
|
{
|
||||||
*(.stack*)
|
*(.stack*)
|
||||||
} > SRAM1
|
} > SRAM2
|
||||||
|
|
||||||
/* Set stack top to end of RAM, and stack limit move down by
|
/* Set stack top to end of RAM, and stack limit move down by
|
||||||
* size of stack_dummy section */
|
* size of stack_dummy section */
|
||||||
__StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
__StackTop = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||||
_estack = __StackTop;
|
_estack = __StackTop;
|
||||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||||
PROVIDE(__stack = __StackTop);
|
PROVIDE(__stack = __StackTop);
|
||||||
|
/* Check if stack exceeds RAM2 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM2)+LENGTH(SRAM2)) >= __StackLimit, "SRAM2 overflow")
|
||||||
|
|
||||||
/* Check if data + heap + stack exceeds RAM limit */
|
|
||||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,24 +139,29 @@ SECTIONS
|
||||||
__end__ = .;
|
__end__ = .;
|
||||||
end = __end__;
|
end = __end__;
|
||||||
*(.heap*)
|
*(.heap*)
|
||||||
|
. += (ORIGIN(SRAM1) + LENGTH(SRAM1) - .);
|
||||||
__HeapLimit = .;
|
__HeapLimit = .;
|
||||||
} > SRAM1
|
} > SRAM1
|
||||||
|
PROVIDE(__heap_size = SIZEOF(.heap));
|
||||||
|
PROVIDE(__mbed_sbrk_start = ADDR(.heap));
|
||||||
|
PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap));
|
||||||
|
/* Check if data + heap exceeds RAM1 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM1)+LENGTH(SRAM1)) >= __HeapLimit, "SRAM1 overflow")
|
||||||
/* .stack_dummy section doesn't contains any symbols. It is only
|
/* .stack_dummy section doesn't contains any symbols. It is only
|
||||||
* used for linker to calculate size of stack sections, and assign
|
* used for linker to calculate size of stack sections, and assign
|
||||||
* values to stack symbols later */
|
* values to stack symbols later */
|
||||||
.stack_dummy (COPY):
|
.stack_dummy (COPY):
|
||||||
{
|
{
|
||||||
*(.stack*)
|
*(.stack*)
|
||||||
} > SRAM1
|
} > SRAM2
|
||||||
|
|
||||||
/* Set stack top to end of RAM, and stack limit move down by
|
/* Set stack top to end of RAM, and stack limit move down by
|
||||||
* size of stack_dummy section */
|
* size of stack_dummy section */
|
||||||
__StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
__StackTop = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||||
_estack = __StackTop;
|
_estack = __StackTop;
|
||||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||||
PROVIDE(__stack = __StackTop);
|
PROVIDE(__stack = __StackTop);
|
||||||
|
/* Check if stack exceeds RAM2 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM2)+LENGTH(SRAM2)) >= __StackLimit, "SRAM2 overflow")
|
||||||
|
|
||||||
/* Check if data + heap + stack exceeds RAM limit */
|
|
||||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,24 +131,29 @@ SECTIONS
|
||||||
__end__ = .;
|
__end__ = .;
|
||||||
end = __end__;
|
end = __end__;
|
||||||
*(.heap*)
|
*(.heap*)
|
||||||
|
. += (ORIGIN(SRAM1) + LENGTH(SRAM1) - .);
|
||||||
__HeapLimit = .;
|
__HeapLimit = .;
|
||||||
} > SRAM1
|
} > SRAM1
|
||||||
|
PROVIDE(__heap_size = SIZEOF(.heap));
|
||||||
|
PROVIDE(__mbed_sbrk_start = ADDR(.heap));
|
||||||
|
PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap));
|
||||||
|
/* Check if data + heap exceeds RAM1 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM1)+LENGTH(SRAM1)) >= __HeapLimit, "SRAM1 overflow")
|
||||||
/* .stack_dummy section doesn't contains any symbols. It is only
|
/* .stack_dummy section doesn't contains any symbols. It is only
|
||||||
* used for linker to calculate size of stack sections, and assign
|
* used for linker to calculate size of stack sections, and assign
|
||||||
* values to stack symbols later */
|
* values to stack symbols later */
|
||||||
.stack_dummy (COPY):
|
.stack_dummy (COPY):
|
||||||
{
|
{
|
||||||
*(.stack*)
|
*(.stack*)
|
||||||
} > SRAM1
|
} > SRAM2
|
||||||
|
|
||||||
/* Set stack top to end of RAM, and stack limit move down by
|
/* Set stack top to end of RAM, and stack limit move down by
|
||||||
* size of stack_dummy section */
|
* size of stack_dummy section */
|
||||||
__StackTop = ORIGIN(SRAM1) + LENGTH(SRAM1);
|
__StackTop = ORIGIN(SRAM2) + LENGTH(SRAM2);
|
||||||
_estack = __StackTop;
|
_estack = __StackTop;
|
||||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||||
PROVIDE(__stack = __StackTop);
|
PROVIDE(__stack = __StackTop);
|
||||||
|
/* Check if stack exceeds RAM2 limit */
|
||||||
|
ASSERT((ORIGIN(SRAM2)+LENGTH(SRAM2)) >= __StackLimit, "SRAM2 overflow")
|
||||||
|
|
||||||
/* Check if data + heap + stack exceeds RAM limit */
|
|
||||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue