viakon 0 25 июня, 2008 Опубликовано 25 июня, 2008 · Жалоба Мега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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 25 июня, 2008 Опубликовано 25 июня, 2008 · Жалоба см опцию. --split-by-reloc (default value) - вобче желательно использовать свой ld файл, в нем написать что-то типа : ... .nvram : { *(.nvram.*) *(.nvram) } = 0x808000 ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 25 июня, 2008 Опубликовано 25 июня, 2008 · Жалоба где взять пример ld файла и как цеплять его? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
733259 0 25 июня, 2008 Опубликовано 25 июня, 2008 · Жалоба где взять пример ld файлаВ avr/lib/ldscripts, Вам подойдёт avr5.xи как цеплять его?-Wl,--script=avr5-custom.x при линковке, если avr5-custom.x - отредакторованный Вами скрипт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 26 июня, 2008 Опубликовано 26 июня, 2008 · Жалоба Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью. nvram : { *(.nvram.*) *(.nvram) } = 0x808000 зачем тогда в этом описании = 0x808000 ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 26 июня, 2008 Опубликовано 26 июня, 2008 · Жалоба Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью. nvram : { *(.nvram.*) *(.nvram) } = 0x808000 зачем тогда в этом описании = 0x808000 ?? Правильно будет nvram : { *(.nvram.*) *(.nvram) } > 0x808000 = используется для заполнения указанным значением незанятого места в секции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 26 июня, 2008 Опубликовано 26 июня, 2008 · Жалоба Нет, так линковщик ругается на синтаксис Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 26 июня, 2008 Опубликовано 26 июня, 2008 · Жалоба Правильно будет 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] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 26 июня, 2008 Опубликовано 26 июня, 2008 · Жалоба Странный синтаксис. После символа ">" должно указыватсья имя региона, в котором должна быть размещена секция. Смотрите документацию, там все написано. Вот общий синтаксис: 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 вероятно лучше указать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbour 0 27 июня, 2008 Опубликовано 27 июня, 2008 · Жалоба Заработало. только пришлось указать LDFLAGS += -Wl,-section-start=.nvram=0x808000 иначе пересекалась с .bss областью. nvram : { *(.nvram.*) *(.nvram) } = 0x808000 зачем тогда в этом описании = 0x808000 ?? погорячился ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться