Скачал,. запустил, вылечил и начал работать и столкнулся с мистикой. Процессор ATmega16U4. Команда lpm r0,Z+ вызывает ошибку компилятора. Пишет ошибка синтаксиса. Полез в даташит - все правильно пишу. После двух дней экспериментов обнаружилось следующее. В подключаемом файле iom16u4.inc (где определяются имена битов, находится в каталоге xxx/avr/inc/bitdefinition) буквой Z определяется флаг нуля в регистре SREG. И этой же буквой определяется пара индексных регистров (r30:r31). Поэтому все команды с адресацией по Z вызывают ошибку компилирования. Вылечил заменой имен битов регистра SREG на SREG_имя бита (SREG_Z) в файле iom16u4.inc. Кстати, так у ATMELа сделано. Я считаю баг очень серьезный, но я про него ничего не мог найти в инете, в т.ч. и на этом форуме. Таки дела.
demiurg_spb
Oct 22 2012, 10:12
Бывает...
И ещё косячок. Для написания комментов используйте СИшные символы /*-----*/ для блока и // до конца строки. Символ ";" не всегда работает, хотя вроде заявлен в даташите. Пример. Так "#define temp r16 ;коментарии" - не работает (не переопределяет r16), причем ошибку синтаксиса не пишет. А так "#define temp r16 //коментарии" работает. Если ";" применяешь после ассемблерной команды или вначале строки, то все работает.
demiurg_spb
Oct 22 2012, 14:16
Думаю, что это не баг а фича.
Раз уж начали в стиле си строку то и комментарии тоже должны быть в том же стиле. По мне так нормально.
ut1wpr
Oct 31 2012, 06:06
Цитата(С_Ч @ Oct 22 2012, 11:20)

Процессор ATmega16U4. Команда lpm r0,Z+ вызывает ошибку компилятора. Пишет ошибка синтаксиса.
Мда. Жалко, я не пишу на АСМе давненько. А не пробовали lpm z0,[Z+] ?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.