уважаемые профессионалы! помогите понять, что происходит.
есть такой код (это уже извраты в процессе отладки, не обращайте внимание на 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 имеют тип float
казалось бы все нормально... ан нет! если
get_temp возвращает
82, то на выходе имеем нормальное значение 16. если же
get_temp возвращает
92, то
argf получает
значение с 9 нулями!!! разумеется, функция возвращает какую-то ересь...
самое смешное заключается в том, что если
get_temp вернет число, например, 100, то результат снова имеет разумный вид...
собираю проект в WinAVR 20100110. раньше доверял этой версии, как самому себе... отлаживаю в протеусе...
может, я где-то туплю по-черному?!
P.S.похоже, разобрался... ступил. если подключить библиотеку математики (опция -
lm) глюки пропадают. при этом очень заметно сокращается объем прошивки!
но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки...
Я бы взял частями... но мне надо сразу.