Вы спросили, нужно ли вам изменить или создать новый скрипт компоновщика. Я бы потребовал, чтобы вы изменили захватывающий скрипт компоновщика. Я нахожу их время от времени довольно обширными. Зачем выбрасывать то, что там уже есть, при изменении его всего несколько строк.
Некоторые очень распространенные случаи, когда микроконтроллеры изменяют скрипт компоновщика:
- Добавление загрузчика в первый сектор флэш-памяти, в то время как фактическая программа запускается в более высоком секторе.
- Добавление сектора, предназначенного для хранения данных, сгенерированных приложением.
- Использование выделенного сектора для параметров конфигурации.
Позволяет использовать первое в качестве примера того, как записать в прошивку разные сектора флэш-памяти. Важно знать, что для этого примера загрузчик и само приложение представляют собой два отдельных проекта, каждый из которых имеет свою собственную конфигурацию компиляции или make-файл. Каждый проект также имеет свой собственный скрипт компоновщика. Ниже приведена часть обоих файлов:
Загрузчик:
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 16K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
}
Заявка:
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x0800C000, LENGTH = (1M - 16K)
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
}
Пожалуйста, не различайте определение FLASH. Флэш загрузчик запускается по умолчанию. Размер, выделенный для загрузчика, составляет 16 КБ. Важно отметить, что общий размер флэш-памяти примера чипа составляет 1M. Это видно по размеру вспышки проекта приложения. Но мы не разрешаем использовать полный 1М для приложения, поскольку, конечно, нам нужно уменьшить его на размер, выделенный для загрузчика. Вы также можете видеть, что он не начинается с того же адреса. Он имеет смещение 0xC000, что составляет 16k.
Прежде чем вы сможете запустить и отладить код приложения, вам нужно сделать еще две вещи:
- Определите смещение таблицы вектора вашего кода. Это необходимо, чтобы компилятор и компоновщик знали, где находится код в памяти. Вот где мне немного не хватает знаний по этой части, поэтому, если кто знает, уточните.
- Если вы хотите отладить ваше приложение, вы также должны указать отладчику, с чего начать. Atollic делает это через скрипт компоновщика. Из того, что я помню несколько лет назад, Atmel Studio имеет опцию в окне программирования, где вы можете установить смещение.
И последнее замечание: когда вы что-то связываете, лучше всего придерживаться секторов флэш-памяти чипа. Часто вы можете удалить только весь сектор. Размещение следующей части кода в начале следующего сектора упрощает работу.
Приведенные примеры основаны на файле компоновщика, сгенерированном Atollic TrueSTUDIO для STM32 для чипа STM32F4xx. Компиляция выполняется с использованием набора инструментов ARM gcc.