Обьясните чего нагенерил gcc:
uint8_t a, b;
...
a = PORTA;
a2c: 82 b1 in r24, 0x02 ; 2
b = PORTC;
a2e: 88 b1 in r24, 0x08 ; 8
a = (a>>SHIFT_FACTOR)&0x0F;
b = (b>>SHIFT_FACTOR)&0x0F;
raw.data[0] = EAC_ok;
a30: 8a ea ldi r24, 0xAA ; 170
a32: 8a 83 std Y+2, r24 ; 0x02
...
raw.data[4] = (a<<4) & b;
a44: 1e 82 std Y+6, r1 ; 0x06
я не понимаю почему значения вычитанные из регистров PORTA, PORTC выбрасываются и результат берется из регистра r1 который этой функцией не устанавливается ни в какое значение. Это бага gcc? какой может быть workaround?