Я скомпилировал проект с arm-none-eabi-g cc для объекта с помощью команды
arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -Os -g -gdwarf-2 -c $< -o $(@)
В настоящее время я получаю объектный файл, когда пытаюсь связать его с командой в объекте foler
arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -g -gdwarf-2 -nostartfiles -T ..\project.ld -o target *
Однако я получил странную ошибку
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memcmp'
Я понимаю, что когда я использую опцию -T, вместо скрипта ссылки по умолчанию будет использоваться файл сценария ссылки. похоже, что определения разделов для некоторой встроенной функции отсутствуют. Я попытался исправить это положение
.text.memcmp : {*(.text.memcmp)}
в моем файле ld, похоже, этот раздел исправлен, однако я получил еще одну ошибку:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memset'
, поэтому я не думаю, что положить. text.memset в LD-файле является правильным исправлением, потому что после того, как я поместил `.text.memset 'в ld-файл, я получил еще одну ошибку:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text._snprintf_r'
Я думаю, что пропустил некоторые опции в G CC создать эти разделы по умолчанию для встроенных функций
Что является причиной root этой проблемы и как это исправить? Большое спасибо!
Обновление: добавьте файл LD ниже:
MEMORY {
INIT_SRAM : ORIGIN = 0x34400000, LENGTH = 0x1FB000
INIT_SRAM_NO_CACHEABLE : ORIGIN = 0x3460A000, LENGTH = 0x1DF00
INIT_SRAM_STACK : ORIGIN = 0x34628000, LENGTH = 0x15000
RAM_RSVD : ORIGIN = ., LENGTH = 0
BOOT_TEST : ORIGIN = 0x43840000 LENGTH = 0x50
}
SECTIONS
{
.boot_test : {*(.boot_test)}> BOOT_TEST
.exception_table ALIGN(4) : > {*(.exception_table)}>INIT_SRAM
.startup ALIGN(4) : {*(.startup)}
.ramcode ALIGN(4) : > {*(.ramcode)}
.text ALIGN(4) : { *(.text) }
.ramcode ALIGN(4) : { *(.ramcode) }
.rodata ALIGN(4) : { *(.rodata) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(16) : { *(.bss) }
_TEST_SESSION_START = .;
.TEST_SESSION :{*(.TEST_SESSION)}
_TEST_SESSION_END = (. - 1);
_Stack_start = .;
__STACK_SIZE = SIZEOF(INIT_SRAM_STACK);
__RAM_NO_CACHEABLE_START = ADDR(INIT_SRAM_NO_CACHEABLE);
}