AVF (07.05.2009 09:20, просмотров: 6633)
компилятор С30 удивил 1-ая конструкция 3 такта, вторая 12 тактов. Почему? Как лучше писать такие конструкции? 1.
if (PORTCbits.RC9) PORTCbits.RC9 = 0;
else PORTCbits.RC9 = 1;
листинг
mov.b 0x02d3,0x0000
mov.b 0x02d3,w0
btst.z w0,#1
bra z, 0x00038e
bclr.b 0x02d3,#1
2.
PORTBbits.RB11 = !PORTBbits.RB11;
листинг
mov.b 0x02cb,w0
ze w0,w0
lsr w0,#3,w0
btg w0,#0
and.b w0,#1,w0
sl w0,#3,w0
mov.w #0x2cb,w1
mov.b [w1],w1
bclr w1,#3
ior.b w1,w0,w1
mov.w w1,w0
mov.b w0,0x02cb
-
- Ну, так это так и должно быть. Bill(159 знак., 07.05.2009 21:17)
- Оптимизацию включи. DL36(433 знак., 07.05.2009 18:10, ссылка)
- так, просто так. для инверсии бита короче писать qwe ^= 1; - jaga-jaga(07.05.2009 12:39)
- Такие конструкции (инверсия битового поля) лучше вообще не писать, имхо. А если для C30, то советую внимательно почитать по ссылке - избежишь многих проблем. У тебя, кстати, серьезная ошибка - писать в порт нужно, используя регистр LAT (защелка порта). Alex B.(973 знак., 07.05.2009 10:17, ссылка)
- Просто фича. В свое время столкнулся с тем, что компилятор фуджицу генерил разный код для if...else и тернарной операции (x ? y : z). - amusin(07.05.2009 09:30)