Не могу врубится в чем проблема. IAR 5.11. ATmega168
В h-файле объявлены константы:
#define CONST1 8640
#define CONST2 720
В С-файле функция вида:
void func(void) {
static unsigned short w, x;
w = (unsigned short)((unsigned long)CONST1 * x / CONST2 + 1);
}
w вычисляется не верно. Проверял операцию по действиям: CONST1 * x вычисляется верно, а вот деление уже возвращает фигню. Что поразительно, начинает считать верно, когда вместо CONST2 подставляю в код ее реальное значение 720:
w = (unsigned short)((unsigned long)CONST1 * x / 720 + 1);
Это работает.
В чем прикол?