Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как работать с внешней памятью?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Spider
Вот понадобилось использовать внешнюю память. Со стороны железа вроде вопросов больше нет - в даташите всё описано. А вот с компиляцией возникли проблемы.
По коду получилось что используется аж 6085 байт оперативной памяти. Но я всё пишу с расчёта на внешнюю оперативку. Так вот посли сборки проекта (WinAVR) получаю такую статистику:
Код
Size after:
main.elf  :
section            size      addr
.data              3910   8388864
.text             31176         0
.bss               2175   8392774
.noinit               0   8394949
.eeprom              66   8454144
.stab              1032         0
.stabstr            132         0
.debug_aranges      160         0
.debug_pubnames    5433         0
.debug_info       23623         0
.debug_abbrev      3722         0
.debug_line       14811         0
.debug_str         5416         0
Total             91656


AVR Memory Usage:
-----------------
Device: atmega128

Program:   35086 bytes (26.8% Full)
(.text + .data + .bootloader)

Data:       6085 bytes (148.6% Full)
(.data + .bss + .noinit)


-------- end --------

Видно, что 149% аж занято. Как же так? В результате программа не стратрует.
В Makefile сделал такое объявление:
Код
EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

И пробовал делать тестовую программу для проверки памяти отлично пишет и читает в адреса далее 0x1100. Может ещё что-то надо указать?
SasaVitebsk
Цитата(Alexey Belyaev @ Jan 25 2007, 12:23) *
Видно, что 149% аж занято. Как же так? В результате программа не стратрует.
В Makefile сделал такое объявление:
Код
EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

И пробовал делать тестовую программу для проверки памяти отлично пишет и читает в адреса далее 0x1100. Может ещё что-то надо указать?


Я так понимаю, что 149% относительно внутренней, хотя тоже не выходит.
А нет вижу. Она EEPROM приплюсовала. Похоже ты не в тот сегмент разместил. Она считает что это EEPROM и, должна в прошивку размещать.
Player
Цитата
Видно, что 149% аж занято. Как же так? В результате программа не стратрует.
В Makefile сделал такое объявление:
Код
EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

И пробовал делать тестовую программу для проверки памяти отлично пишет и читает в адреса далее 0x1100. Может ещё что-то надо указать?


Я так понимаю, что часть используемого RAM не определена. Надо проверить описание переменных и сегмента данных.Кстати о тестовой програмке. Если обращался непосредсвенно к RAM то действительно все будет работать. Проверь правильность определения области RAM. smile.gif Удачи.
SasaVitebsk
Кстати объём оперативки можно сделать очень большим. С полным доступом. Когда пришёл из института и оперился немного, то сделал стенд. На стенде стояли 8085/8051/8048 с общим адресным пространством (В корзине ЕС1841). Для 8051 адресное пространство было 1Мбайт. smile.gif

На этом стенде реально отлаживалось ПО. То есть он был живой. Ну и ПО я на него своё написал. Для кождого проца свой ассемблер/дизасемблер.

Ту бы энергию да в мирное русло. rolleyes.gif
Spider
Цитата(Player @ Jan 25 2007, 20:31) *
Цитата

Видно, что 149% аж занято. Как же так? В результате программа не стратрует.
В Makefile сделал такое объявление:
Код
EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

И пробовал делать тестовую программу для проверки памяти отлично пишет и читает в адреса далее 0x1100. Может ещё что-то надо указать?


Я так понимаю, что часть используемого RAM не определена. Надо проверить описание переменных и сегмента данных.Кстати о тестовой програмке. Если обращался непосредсвенно к RAM то действительно все будет работать. Проверь правильность определения области RAM. smile.gif Удачи.


А как это проверить? Где она определяется?
Player
Цитата
А как это проверить? Где она определяется?


Проверить это можно посмотрев List file или map file; Там всегда есть карта распределения памяти по областям занятым проектом (массивы, таблицы, переменные,процедуры,функции и т.д.). smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.