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

 
 
> gnu ld - как сделать "дырку" в памяти
Непомнящий Евген...
сообщение Aug 14 2012, 11:10
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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'.

Понятно, что можно руками распихать разные файлы по разным секциям, но нет ли способа сделать это автоматически?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Aug 14 2012, 14:40
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Судя по вот этому http://sourceware.org/ml/binutils/2002-11/msg00066.html, так сделать не получится. А жаль. В иаровском линкере никаких проблем с этим не было...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 15 2012, 05:36
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 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: проверил - не работаетsad.gif
Ругается что на .text налезает...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
aas
сообщение Aug 16 2012, 06:30
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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: проверил - не работаетsad.gif
Ругается что на .text налезает...


У нас примерно так и сделано, и все работает. Единственно, __attribute__((section(".section_my"))) стоит в конце, после определения переменной.
используем GNU ARM, и компилятор, и линковщик
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 16 2012, 07:44
Сообщение #5


неотягощённый злом
******

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



Цитата(aas @ Aug 16 2012, 10:30) *
У нас примерно так и сделано, и все работает. Единственно, __attribute__((section(".section_my"))) стоит в конце, после определения переменной.
используем GNU ARM, и компилятор, и линковщик

Так и у меня всё работает, пока объём секции .text не превышает объёма N, где N-это стартовый адрес секции .section_my.
Поэтому я свою секцию .section_my прижимаю к концу флэша. Стоит её передвинуть поближе к началу чтобы она была окружена секцией .text как кердык и случается.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Непомнящий Евгений   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


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:11
Рейтинг@Mail.ru


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