ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
769201
Chum_A (17.07.2017 15:22, просмотров: 640)
Достался "трофей" в виде проекта для 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?