Цитата(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. Возможно надо просто проапдейдиться. Знатоки Вам лучше расскажут, как победить.