В программе есть описания:
#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);
Очевидно, оба предложения валидны с точки зрения компилятора при использовании стандартных определений битов (через цифры 7...0). Однако второе предложение является ошибочным. Нужно правильно записать так:
SETBITS(TIMSK,BIT(TOIE1)+BIT(TOIE0));
Хотелось бы сделать так, чтобы либо компилятор выдавал сообщение об ошибке, или переписать определение для SETBITS, чтобы оно имело бОльшую "защиту от дурака".
Как это разумнее сделать в IAR EWAVR?