реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATmega128 и AVR-GCC
avat
сообщение Dec 1 2007, 12:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 1-04-07
Пользователь №: 26 686



Никак не могу откомпилировать с помощью 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 стоит самый свежий. Как победить проблему?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Dec 1 2007, 12:57
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



IMHO Предположение, которое надо проверить по документации к GCC. Размер статических данных во flash превысил размер сегмента (64к)


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
zhevak
сообщение Dec 1 2007, 13:00
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



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


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Dec 3 2007, 20:57
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Сегодня посмотрел, что можно получить. Массивы во флэши объемом больше,чем 32767 (2^15-1) не определяются. Несколько (например, 3) массивов этого размера определяются и проект собирается. Проект под 128 мегу с общим объемом во флэши более 110к собирался без проблем (в железо не шил). В документации не нашел ограничения на размер массива.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Jungle Murzik
сообщение Dec 4 2007, 19:20
Сообщение #5





Группа: Validating
Сообщений: 1
Регистрация: 4-12-07
Пользователь №: 32 973



Error: value of 65832 too large for field of 2 bytes обозначает что некоторое значение не помещяется в 2 байта
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 09:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016