Имеется IAR 5.10 и проект на С для ATmega88. Исходник (кусок):
#define QUARTZ 10000000 #define CLOCK QUARTZ/1000000 #define Wait(mks) __delay_cycles(mks*CLOCK)
Wait(480);
При компиляции идут предупреждения на строку с функцией о выходе значения за пределы диапазона. Но ведь итоговое значение равно 4800, а параметр __delay_cycles есть unsigned long! Если CLOCK жестко приравнять к 10, то все нормально. Но если ее приравнять к 100, то получаем ту-же ошибку out of range плюс еще и о смене знака... :-(
Получается, что компилятор работает с 16-ти битными данными? Как это побороть? И почему не работает вышеприведенный пример?
|