Цитата(ivainc1789 @ Sep 7 2007, 18:44)

В программе есть описания:
#define BIT(x) (1 << (x))
#define SETBIT(x,y) (x |= (1<<y)) // Set bit y in byte x
#define SETBITS(x,y) (x |= (y)) // Set bits y in byte x
Соответственно при написании исходных текстов пользователь может забыть как правильно использовать эти определения и написать примерно так:
SETBIT(TIMSK,TOIE1);
SETBITS(TIMSK,TOIE1+TOIE0);
Я обычно делаю так
#define TOIE1_MASK (1<<TOIE1)
#define TOIE0_MASK (1<<TOIE0)
#define TOIE01_MASK (TOIE1_MASK | TOIE1_MASK)
Если лень писать каждый раз _MASK то заменяем его на _M, типа TOIE1_M, ну или как-то еще,
удобнее автору.
количество вариантов значений которые нужно пинать в регистр обычно ограничено 2-3
по этому можно писать и так:
#define TIMSK_M1 (1<<TOIE1)
#define TIMSK_M2 ((1<<TOIE1) | (1<<TOIE0))
ну и применение
TIMSK |= TIMSK_Mx;
Цитата
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
Скобочки где-то забыли, например при 1<<yy
у << маленький приоритет