|
gnu ld - как сделать "дырку" в памяти |
|
|
|
Aug 14 2012, 11:10
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Мне надо расположить прошивку в нижней и верхней части флеша, с пустым местом посередине. Оптимально - чтобы было занято нижние 4к и столько, сколько нужно - сверху. Но в принципе пойдет и указать размер верхнего сегмента руками. Пробовал так: Код MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x0000C000 rom1 (rx) : ORIGIN = 0x08000000, LENGTH = 0x00001000 rom2 (rx) : ORIGIN = 0x08000000 + 0x00040000 - 0x0001000, LENGTH = 0x00001000 }
SECTIONS { .text : { KEEP(*(.vectors)) *(.text .text.*) *(.rodata) } > rom1
.text2 : { *(.text .text.*) *(.rodata) } > rom2 ... } Ругается section `.text' will not fit in region `rom1'. Понятно, что можно руками распихать разные файлы по разным секциям, но нет ли способа сделать это автоматически?
|
|
|
|
|
 |
Ответов
|
Aug 15 2012, 05:36
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
В Makefile Код MY_FLASH_ABS_ADDRESS = 0x0F80 LDFLAGS += -Wl,--section-start=.section_my=$(MY_FLASH_ABS_ADDRESS) В программе Код #define PROGMEM_SECTION_MY __attribute__((section(".section_my")))
const uint8_t PROGMEM_SECTION_MY my_data[128] = {....}; Таким макаром можно зарезервировать место во флеше и проинитить его нужными данными. Я так делал для резервирования места в конце флеша, но думаю, что это должно сработать и с любым другим местом (я не проверял). PS: проверил - не работает Ругается что на .text налезает...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Aug 16 2012, 06:30
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 15-12-11
Из: Краснодар
Пользователь №: 68 865

|
Цитата(demiurg_spb @ Aug 15 2012, 09:36)  В Makefile Код MY_FLASH_ABS_ADDRESS = 0x0F80 LDFLAGS += -Wl,--section-start=.section_my=$(MY_FLASH_ABS_ADDRESS) В программе Код #define PROGMEM_SECTION_MY __attribute__((section(".section_my")))
const uint8_t PROGMEM_SECTION_MY my_data[128] = {....}; Таким макаром можно зарезервировать место во флеше и проинитить его нужными данными. Я так делал для резервирования места в конце флеша, но думаю, что это должно сработать и с любым другим местом (я не проверял). PS: проверил - не работает Ругается что на .text налезает... У нас примерно так и сделано, и все работает. Единственно, __attribute__((section(".section_my"))) стоит в конце, после определения переменной. используем GNU ARM, и компилятор, и линковщик
|
|
|
|
Сообщений в этой теме
Непомнящий Евгений gnu ld - как сделать "дырку" в памяти Aug 14 2012, 11:10 Непомнящий Евгений Да, линкер какой-то недоделанный
Вроде и мощный... Aug 15 2012, 06:40 MBR Цитата(Непомнящий Евгений @ Aug 15 2012, 10... Aug 16 2012, 04:35  Сергей Борщ QUOTE (MBR @ Aug 16 2012, 07:35) С линкер... Aug 16 2012, 04:50  Непомнящий Евгений Цитата(MBR @ Aug 16 2012, 08:35) С линкер... Aug 16 2012, 10:20   aas Непомнящий Евгений,
я так понял, с дыркой собирает... Aug 16 2012, 17:49    Непомнящий Евгений Цитата(aas @ Aug 16 2012, 21:49) Ну то ес... Aug 17 2012, 05:15   MBR Цитата(Непомнящий Евгений @ Aug 16 2012, 14... Sep 4 2012, 07:30 Непомнящий Евгений радикальная идея.
Минусы:
1. надо поместиться в т... Sep 4 2012, 07:40 MBR Цитата(Непомнящий Евгений @ Sep 4 2012, 11... Sep 4 2012, 08:17 Непомнящий Евгений Тогда плиз напишите поподробнее.
Вот у меня загруз... Sep 4 2012, 09:28 MBR Ну да, вполне стандартные задачи. Обычно у первичн... Sep 4 2012, 09:48 Непомнящий Евгений Цитата(MBR @ Sep 4 2012, 13:48) Обычно у ... Sep 4 2012, 12:39  MBR Цитата(Непомнящий Евгений @ Sep 4 2012, 16... Sep 5 2012, 05:36   Непомнящий Евгений Цитата(MBR @ Sep 5 2012, 09:36) Как зачем... Sep 5 2012, 05:49    _Артём_ Цитата(Непомнящий Евгений @ Sep 5 2012, 08... Sep 5 2012, 06:04     Непомнящий Евгений Цитата(_Артём_ @ Sep 5 2012, 10:04) Что-т... Sep 5 2012, 06:29      _Артём_ Цитата(Непомнящий Евгений @ Sep 5 2012, 09... Sep 5 2012, 06:34    MBR Цитата(Непомнящий Евгений @ Sep 5 2012, 09... Sep 5 2012, 06:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|