Достался "трофей" в виде проекта для Cortex-M3 на gcc+libopencm3. Нужно переделать на gcc+CMSIS. В наличии: Шаблон startup.S под Cortex-M3 для gcc+CMSIS в котором объявлены stack и heap:
.section .stack
.align 3
#ifdef __STACK_SIZE
.equ Stack_Size, __STACK_SIZE
#else
.equ Stack_Size, 0xc00
#endif
.globl __StackTop
.globl __StackLimit
__StackLimit:
.space Stack_Size
.size __StackLimit, . - __StackLimit
__StackTop:
.size __StackTop, . - __StackTop
.section .heap
.align 3
#ifdef __HEAP_SIZE
.equ Heap_Size, __HEAP_SIZE
#else
.equ Heap_Size, 0
#endif
.globl __HeapBase
.globl __HeapLimit
__HeapBase:
.if Heap_Size
.space Heap_Size
.endif
.size __HeapBase, . - __HeapBase
__HeapLimit:
.size __HeapLimit, . - __HeapLimit
И есть скрипт линкера:
.heap (COPY):
{
__end__ = .;
PROVIDE(end = .);
*(.heap*)
__HeapLimit = .;
} > RAM
.stack_dummy (COPY):
{
*(.stack*)
} > RAM
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
Более-менее понятно и логично.
И есть проект под libopencm3, где startup-а нет в принципе, а в скрипте линкера есть:
PROVIDE( _stack = ORIGIN(appram) + LENGTH(appram) );
последняя секция описана как:
. = ALIGN(4);
end = .;
Мне нужен startup и нужно заимствовать ld от libopencm3, вопросы:
1 Где определена heap под libopencm3 и нужно ли это определение? "Трофей" динамического выделения памяти не использует.
2 Мне что, достаточно выкинуть из startup определения stack и heap и задействовать "трофейный" ld?