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

 
 
 
Reply to this topicStart new topic
> Как правильно описать свою секцию
viakon
сообщение Jun 25 2008, 04:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Мега128 + FRAM FM18L08. Внешняя память начинается с 0x8000.
описываю в хедере
#define NVRAM __attribute__((section(".nvram")))

Далее пременные описываю

volatile NVRAM unsigned int next_page = 0;
NVRAM struct navigation nav_buffer[2000];
NVRAM struct _bort bort[240];

В мэйкефайле LDFLAGS += -Wl,-section-start=.nvram=0x808000

или EXTMEMOPTS = -Wl,--section-start,.nvram=0x808000,--defsym=__heap_end=0x80ffff

теже яйца только в профиль.

пока описание переменных в одном файле, все нормально, они раскладываются в эту область. Стоит описать еще одну переменную в другом файле, создается секция nvram.1 и размещается во внутреннем ОЗУ. Хотелось бы как с еепромом, вместо EEMEM, указывать NVRAM и пременные ложились в нужную область

winavr20070525
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jun 25 2008, 05:13
Сообщение #2


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



см опцию. --split-by-reloc (default value) - вобче желательно использовать свой ld файл, в нем написать что-то типа :

...
.nvram :
{
*(.nvram.*)
*(.nvram)
} = 0x808000
...
Go to the top of the page
 
+Quote Post
viakon
сообщение Jun 25 2008, 05:23
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



где взять пример ld файла и как цеплять его?
Go to the top of the page
 
+Quote Post
733259
сообщение Jun 25 2008, 06:54
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146



Цитата
где взять пример ld файла
В avr/lib/ldscripts, Вам подойдёт avr5.x
Цитата
и как цеплять его?
-Wl,--script=avr5-custom.x при линковке, если avr5-custom.x - отредакторованный Вами скрипт.
Go to the top of the page
 
+Quote Post
viakon
сообщение Jun 26 2008, 04:08
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью.

nvram :
{
*(.nvram.*)
*(.nvram)
} = 0x808000

зачем тогда в этом описании = 0x808000 ??
Go to the top of the page
 
+Quote Post
amw
сообщение Jun 26 2008, 10:37
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(viakon @ Jun 26 2008, 07:08) *
Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью.

nvram :
{
*(.nvram.*)
*(.nvram)
} = 0x808000

зачем тогда в этом описании = 0x808000 ??

Правильно будет
Код
nvram :
{
*(.nvram.*)
*(.nvram)
} > 0x808000

= используется для заполнения указанным значением незанятого места в секции.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
viakon
сообщение Jun 26 2008, 10:47
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Нет, так линковщик ругается на синтаксис
Go to the top of the page
 
+Quote Post
alx2
сообщение Jun 26 2008, 12:41
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(amw @ Jun 26 2008, 15:37) *
Правильно будет
Код
nvram :
{
*(.nvram.*)
*(.nvram)
} > 0x808000
Странный синтаксис. После символа ">" должно указыватсья имя региона, в котором должна быть размещена секция. Смотрите документацию, там все написано. Вот общий синтаксис:
Код
    section [address] [(type)] :
       [AT(lma)] [ALIGN(section_align)] [SUBALIGN(subsection_align)]
       {
         output-section-command
         output-section-command
         ...
       } [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp]


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
amw
сообщение Jun 26 2008, 16:51
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(alx2 @ Jun 26 2008, 15:41) *
Странный синтаксис. После символа ">" должно указыватсья имя региона, в котором должна быть размещена секция. Смотрите документацию, там все написано. Вот общий синтаксис:
Код
    section [address] [(type)] :
       [AT(lma)] [ALIGN(section_align)] [SUBALIGN(subsection_align)]
       {
         output-section-command
         output-section-command
         ...
       } [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp]

Прошу прощения. Поспешиш - насмешиш.
Вы правы на счет регионов.
Более полный отрывок будет таким примерно.
Код
MEMORY
{
........
  NVRAM    (r)    :    ORIGIN = 0x808000, LENGTH = <РАЗМЕР_ЭТОГО_РЕГИОНА>
........
}
SECTIONS
{
........
.nvram :
{
*(.nvram.*)
*(.nvram)
} >NVRAM =0xFF
........
}

Заполнение 0xFF не обязательно, но по умолчанию заполняется нулями. Для EEPROM вероятно лучше указать.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Jun 27 2008, 05:31
Сообщение #10


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Цитата(viakon @ Jun 26 2008, 07:08) *
Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью.

nvram :
{
*(.nvram.*)
*(.nvram)
} = 0x808000

зачем тогда в этом описании = 0x808000 ??


погорячился wink.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:22
Рейтинг@Mail.ru


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