Цитата(Rst7 @ Feb 21 2008, 13:01)

А если еще и signed char, то вообще мраки начинаются...
Да тоже самое что и unsigned char, просто сдвиг другой для unsigned используется пара LSL/LSR а для signed LSL/ASR.
Вообще что бы код хорошо работал и на ARM и на AVR, я все локальные переменные объявляю uint_fast8_t, и все операции с переменными которые в памяти делаю через временные локальные объявленные как uint_fast8_t. Тогда все нормально загрузка идет через LDRB, а промежуточные операции все 32 битные (на ARM)
Тут главное помнить что uint_fast8_t может быть больше 8 бит....
примерно так
Код
uint8_t var;
void f(uint_fast8_t arg)
{
uint_fast8_t tmp;
tmp = var;
if ( tmp > arg) tmp = arg+5;
else tmp*=2;
var = tmp;
}
Сообщение отредактировал KRS - Feb 21 2008, 10:27