есть такой код (это уже извраты в процессе отладки, не обращайте внимание на volatile и прочие несуразности):
Код
volatile static int16_t arg;
volatile static float argf;
int16_t get_temp(uint8_t chanel);
int16_t get_temperature(uint8_t chanel){
arg = get_temp(chanel);
argf = arg; // уже на этом операторе argf получает дикое значение, если arg == 92.
argf = argf - config.offset[chanel];
argf = argf * config.gain[chanel];
argf = argf / 1000;
return argf;
}
config.offset и config.gain имеют тип floatvolatile static float argf;
int16_t get_temp(uint8_t chanel);
int16_t get_temperature(uint8_t chanel){
arg = get_temp(chanel);
argf = arg; // уже на этом операторе argf получает дикое значение, если arg == 92.
argf = argf - config.offset[chanel];
argf = argf * config.gain[chanel];
argf = argf / 1000;
return argf;
}
казалось бы все нормально... ан нет! если get_temp возвращает 82, то на выходе имеем нормальное значение 16. если же get_temp возвращает 92, то argf получает значение с 9 нулями!!! разумеется, функция возвращает какую-то ересь...
самое смешное заключается в том, что если get_temp вернет число, например, 100, то результат снова имеет разумный вид...
собираю проект в WinAVR 20100110. раньше доверял этой версии, как самому себе... отлаживаю в протеусе...
может, я где-то туплю по-черному?!
P.S.
похоже, разобрался... ступил. если подключить библиотеку математики (опция -lm) глюки пропадают. при этом очень заметно сокращается объем прошивки!
но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки...