Цитата(Romanello @ Jul 1 2008, 17:50)

круто все работает. Спасибо.
Порты и так пришлось перевернуть, т.к. разводка по другому не получалась, теперь приходится думать как лучше управлять перевернутыми портами.
Если ещё вот так сделать:
Код
unsigned char bitrev8(unsigned char c)
{
c = ((c>>1) & 0x55) | ((c & 0x55)<<1);
c = ((c>>2) & 0x33) | ((c & 0x33)<<2);
c = (c>>4) | (c<<4);
return c;
}
то GCC с -O3 генерит:
Код
<bitrev8>:
E1A030A0 mov r3, r0, lsr #0x01
E2033055 and r3, r3, #0x00000055
E2000055 and r0, r0, #0x00000055
E1833080 orr r3, r3, r0, lsl #0x01
E1A02123 mov r2, r3, lsr #0x02
E2022033 and r2, r2, #0x00000033
E2033033 and r3, r3, #0x00000033
E1822103 orr r2, r2, r3, lsl #0x02
E1A00222 mov r0, r2, lsr #0x04
E1800202 orr r0, r0, r2, lsl #0x04
E20000FF and r0, r0, #0x000000ff
E12FFF1E bx lr
И то строчка
and r0, r0, #0x000000ff лишняя.