С МК AVR работаю я уже достаточно давно и казалось бы все уже понятно и возможные ошибки могут появится только по собственной вине. Но в течение полугода пришлось дважды столкнуться с одной интересной особенностью, объяснения которой я так и не нашел. Речь идет о командах условных переходов, точнее о команде перехода по метке после выполнения операции сравнения - BRGE. Команда игнорируется АЛУ процессора и переход не осуществляется при любых условиях. Симулятор AVR Studio при этом отрабатывает нормально.
Например:
m2:
rcall ADCHN
cpi tmp1,20
brge m2
m1:
nop
Данная конструкция не работает. А вот перестроив программу так, получаем работоспособный код:
m2:
rcall ADCHN
cpi tmp1,20
brlo m1
rjmp m2
m1:
nop
Ошибка была выявлена на кристаллах Tiny2313 и Tiny26. В списке поддерживаемых инструкций этих МК команда BRGE присутствует, компилятор ошибок не выдает, и в Errata обоих кристаллов я не нашел упоминаний об этой проблеме. Использовался компилятор Assembler2 из AVR Studio 4.12 Service Pack 1 Build 462.
Непонятно, неужели никто еще не сталкивался с подобной проблемой?
среда, 17 июня 2009 г.
Подписаться на:
Сообщения (Atom)
