реклама на сайте
подробности

 
 
> STM32F407 arm-none-eabi-gcc, Как запретить линкеру использовать некоторые сектора FLASH
nanorobot
сообщение Aug 24 2016, 07:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



В проекте на STM32F407 часть секторов флеш использую для хранения данных. Ранее обходился последними секторами, сама программа не так велика, последние сектора остаются не заняты кодом. Сейчас возникла необходимость использовать сектора 2 и 3 как самые маленькие по об'ему. Как запретить линкеру использовать их для размещения кода. Своих знаний недостаточно, к сожалению, а исследования скритпов линкера имеющихся примеров не помогли. Прошу помощи. Linux/Eclipse/arm-none-eabi-gcc 5.3.1

Сообщение отредактировал nanorobot - Aug 24 2016, 07:13
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
scifi
сообщение Aug 24 2016, 07:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Насколько я помню, линкер gcc не умеет размещать секции в дырявых областях памяти. Остаётся только вариант с двумя областями памяти и в скрипте руками раскидать секции по этим областям.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Aug 25 2016, 05:37
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Пример. В оригинальный скрипт компоновщика

Код
KEEP(*(.isr_vector))
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))


Добавляете свою секцию

Код
KEEP(*(.isr_vector))

. = ALIGN (512);
*(.flash_var*)
. = ALIGN (512);
*(.flash_var_end*)

*(.text*)
KEEP(*(.init))
KEEP(*(.fini))


в ALIGN пишите размер страницы, так у вас начало и конец будут выровнены по страницам. Для контроля смотреть *.sym файл
Цитата
00000000 a Heap_Size
00000400 a Stack_Size
08000000 T __isr_vector
08000200 t Service::Config::mConfigDataFlashArray <--------------------------------------------
08000600 t __do_global_dtors_aux
08000624 t frame_dummy
0800065c T _mainCRTStartup


Саму переменную объявляем с атрибутом, указывающим на используюмую для переменной секцию
Код
uint8_t __attribute__ ((section(".flash_var"))) mConfigDataFlashArray[sizeof(SConfigData_Internal)];

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 10:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01312 секунд с 7
ELECTRONIX ©2004-2016