Перейти к содержанию
    

Как правильно описать свою секцию

Мега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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

...

.nvram :

{

*(.nvram.*)

*(.nvram)

} = 0x808000

...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

где взять пример ld файла
В avr/lib/ldscripts, Вам подойдёт avr5.x
и как цеплять его?
-Wl,--script=avr5-custom.x при линковке, если avr5-custom.x - отредакторованный Вами скрипт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

nvram :

{

*(.nvram.*)

*(.nvram)

} = 0x808000

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

nvram :

{

*(.nvram.*)

*(.nvram)

} = 0x808000

 

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

Правильно будет

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно будет

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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странный синтаксис. После символа ">" должно указыватсья имя региона, в котором должна быть размещена секция. Смотрите документацию, там все написано. Вот общий синтаксис:
    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 вероятно лучше указать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

nvram :

{

*(.nvram.*)

*(.nvram)

} = 0x808000

 

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

 

погорячился ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...