Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATmega128 и AVR-GCC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
avat
Никак не могу откомпилировать с помощью WinAVR (GCC) программу в ATmega128. Компилятор выдает кучу ошибок типа
C:\DOCUME~1\Andrey\LOCALS~1\Temp/ccQfH4oc.s: Assembler messages:
C:\DOCUME~1\Andrey\LOCALS~1\Temp/ccQfH4oc.s:52603: Error: value of 65832 too large for field of 2 bytes

В программе примерно 70кБайт массивов типа unsigned int во Flash-памяти. До определенного предела (примерно 65к общего объема кода) все компилируется на ура, затем, стоит добавить еще немного таблиц, все рушится. Такое впечатление, что происходит сбой компиляции на рубеже 64к Flash, если размер генерируемого кода превосходит это значение. WinAVR стоит самый свежий. Как победить проблему?
mdmitry
IMHO Предположение, которое надо проверить по документации к GCC. Размер статических данных во flash превысил размер сегмента (64к)
zhevak
Цитата(avat @ Dec 1 2007, 17:01) *
Никак не могу откомпилировать с помощью WinAVR (GCC) программу в ATmega128. Компилятор выдает кучу ошибок типа
C:\DOCUME~1\Andrey\LOCALS~1\Temp/ccQfH4oc.s: Assembler messages:
C:\DOCUME~1\Andrey\LOCALS~1\Temp/ccQfH4oc.s:52603: Error: value of 65832 too large for field of 2 bytes

В программе примерно 70кБайт массивов типа unsigned int во Flash-памяти. До определенного предела (примерно 65к общего объема кода) все компилируется на ура, затем, стоит добавить еще немного таблиц, все рушится. Такое впечатление, что происходит сбой компиляции на рубеже 64к Flash, если размер генерируемого кода превосходит это значение. WinAVR стоит самый свежий. Как победить проблему?


К сожалению, по WinAVR я ничего не могу сказать (я его не использую).

В АВР-ках, у которых флешь более 64К, для чтения данных из верхних адресов применяется команда ELPM, вместо LPM. Команда ELPM также использует регистр Z, но, поскольку в нем только 16 разрядов, то ELPM использует младший бит регистра RAMPZ в качестве старшего бита адреса. Таким образом достигается адресация данных выше границы 64К.

Я предполагаю, что WinAVR скорее всего не умеет работать с командой ELPM. Возможно надо просто проапдейдиться. Знатоки Вам лучше расскажут, как победить.
mdmitry
Сегодня посмотрел, что можно получить. Массивы во флэши объемом больше,чем 32767 (2^15-1) не определяются. Несколько (например, 3) массивов этого размера определяются и проект собирается. Проект под 128 мегу с общим объемом во флэши более 110к собирался без проблем (в железо не шил). В документации не нашел ограничения на размер массива.
Jungle Murzik
Error: value of 65832 too large for field of 2 bytes обозначает что некоторое значение не помещяется в 2 байта
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.