В настоящее время я пытаюсь скомпилировать проект mbed в автономном режиме с использованием gcc-arm-embedded, но я хочу изменить начальный адрес, поскольку эта программа предназначена для использования с загрузчиком, поэтому в конечном итоге придется запускать с 0x10000. Я экспортировал свой проект как GCC-ARM-EMBEDDED и могу построить проект с помощью gcc. Однако я не знаю, как указать начальный адрес 0x10000. Я попытался изменить сценарий LPC1768.ld, изменив ORIGIN FLASH на 0x10000, но мне кажется, что он ничего не делает.
MEMORY
{
FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 0x70000
RAM (rwx) : ORIGIN = 0x100000C8, LENGTH = 0x7F38
USB_RAM(rwx) : ORIGIN = 0x2007C000, LENGTH = 16K
ETH_RAM(rwx) : ORIGIN = 0x20080000, LENGTH = 16K
}
Есть ли в Makefile или где-то еще опция, которая поможет изменить начальный адрес программы, чтобы она могла работать правильно, когда я перехожу с загрузчика на адрес 0x10000?
РЕДАКТИРОВАТЬ:
Я думаю, что понимаю, чего мне нужно достичь, благодаря паре ответов, но по некоторым причинам я не могу заставить это работать. Mbed не экспортирует файл startup_LPC17xx.s, поэтому я попытался использовать файл из CMSIS, но безуспешно. Мне интересно, действительно ли мне нужно изменить код запуска, поскольку процесс выглядит следующим образом:
- Загрузчик работает с 0x0000
- Загрузчик выполнит некоторые проверки и в конечном итоге запустит пользовательское приложение с адресом 0x10000. Загрузчик фактически перемещает векторную таблицу перед переходом на 0x10000. Это пользовательское приложение, которое я пытаюсь создать с помощью gcc, оно не будет работать при включении питания, оно будет работать только после того, как загрузчик запустится. Не уверен, что это ясно, но я бы подумал, что сработает только изменение сценария компоновщика ... но это не так.
Подробная информация о скрипте компоновщика, в котором я изменил адрес этого раздела на 0x10000:
РАЗДЕЛЫ {
.text :
{
*startup_LPC17xx.o
KEEP(*(.isr_vector))
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > FLASH
.ARM.extab : etc..
РЕДАКТИРОВАТЬ2: Я добавил * startup_LPC17xx.o в свой сценарий, похоже, сейчас все работает нормально :)