Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407 arm-none-eabi-gcc
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
nanorobot
В проекте на STM32F407 часть секторов флеш использую для хранения данных. Ранее обходился последними секторами, сама программа не так велика, последние сектора остаются не заняты кодом. Сейчас возникла необходимость использовать сектора 2 и 3 как самые маленькие по об'ему. Как запретить линкеру использовать их для размещения кода. Своих знаний недостаточно, к сожалению, а исследования скритпов линкера имеющихся примеров не помогли. Прошу помощи. Linux/Eclipse/arm-none-eabi-gcc 5.3.1
scifi
Насколько я помню, линкер gcc не умеет размещать секции в дырявых областях памяти. Остаётся только вариант с двумя областями памяти и в скрипте руками раскидать секции по этим областям.
smalcom
Пример. В оригинальный скрипт компоновщика

Код
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)];

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.