Как я могу изменить начальный адрес на флэш-памяти? - PullRequest
3 голосов
/ 05 июля 2019

Я использую STM32F746ZG и FreeRTOS.Начальный адрес флэш-памяти 0x08000000.Но я хочу изменить его на 0x08040000.Я искал эту проблему через Google, но я не нашел решения.

Я изменил скрипт компоновщика следующим образом.

MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 320K
/* FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K */
FLASH (rx)      : ORIGIN = 0x8040000, LENGTH = 768K
}

Если я только изменил его и запустил отладчик, у него возникла проблема.Если я изменю VECT_TAB_OFFSET с 0x00 на 0x4000, он будет работать нормально.

/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET  0x40000  /* 0x00 */

SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; 

Но если я не использую отладчик, он ничего не работает.Это означает, что он работает только при использовании ST-Linker.

Пожалуйста, дайте мне знать, если вы знаете решение.Спасибо за заранее ваш ответ.

Ответы [ 2 ]

3 голосов
/ 05 июля 2019

Адрес загрузки может быть установлен в байтах опции.

Вы можете установить любой адрес во флэш-памяти с шагом 16 Кбайт.В области байтов опций есть два 16-битных регистра: один используется, когда при перезагрузке низкий загрузочный вывод, а другой - при высоком.Запишите желаемый адрес, сдвинутый вправо на 14 битов, т.е. разделенный на 16384.

Для загрузки с 0x08040000 запишите 0x2010 в регистр, как описано в главе Программирование байтов опции главысправочное руководство.

enter image description here

0 голосов
/ 05 июля 2019

Вам нужно поместить 8 байтов в исходное начало FLASH. Stm32 загружается всегда с адреса 0x00000000, который связан с одним из запоминающих устройств (в зависимости от загрузочных выводов и опций).

Первое слово содержит указатель стека, второе - ваш обработчик сброса. Вы никогда не получите свой код, поскольку он всегда загружается с одного и того же адреса.

Вам нужно будет изменить скрипт компоновщика и файлы запуска, в которых определены векторы

...