|
|
  |
Как правильно описать свою секцию |
|
|
|
Jun 25 2008, 04:06
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 25 2008, 06:54
|
Местный
  
Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146

|
Цитата где взять пример ld файла В avr/lib/ldscripts, Вам подойдёт avr5.x Цитата и как цеплять его? -Wl,--script=avr5-custom.x при линковке, если avr5-custom.x - отредакторованный Вами скрипт.
|
|
|
|
|
Jun 26 2008, 10:37
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jun 26 2008, 12:41
|

Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 26 2008, 16:51
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|