Группа: Участник
Сообщений: 21
Регистрация: 22-10-12
Из: г. Москва
Пользователь №: 74 038
Скачал,. запустил, вылечил и начал работать и столкнулся с мистикой. Процессор ATmega16U4. Команда lpm r0,Z+ вызывает ошибку компилятора. Пишет ошибка синтаксиса. Полез в даташит - все правильно пишу. После двух дней экспериментов обнаружилось следующее. В подключаемом файле iom16u4.inc (где определяются имена битов, находится в каталоге xxx/avr/inc/bitdefinition) буквой Z определяется флаг нуля в регистре SREG. И этой же буквой определяется пара индексных регистров (r30:r31). Поэтому все команды с адресацией по Z вызывают ошибку компилирования. Вылечил заменой имен битов регистра SREG на SREG_имя бита (SREG_Z) в файле iom16u4.inc. Кстати, так у ATMELа сделано. Я считаю баг очень серьезный, но я про него ничего не мог найти в инете, в т.ч. и на этом форуме. Таки дела.
Группа: Участник
Сообщений: 21
Регистрация: 22-10-12
Из: г. Москва
Пользователь №: 74 038
И ещё косячок. Для написания комментов используйте СИшные символы /*-----*/ для блока и // до конца строки. Символ ";" не всегда работает, хотя вроде заявлен в даташите. Пример. Так "#define temp r16 ;коментарии" - не работает (не переопределяет r16), причем ошибку синтаксиса не пишет. А так "#define temp r16 //коментарии" работает. Если ";" применяешь после ассемблерной команды или вначале строки, то все работает.