реклама на сайте
подробности

 
 
> WinAVR + float == просто беда
ARV
сообщение Aug 16 2016, 17:52
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



уважаемые профессионалы! помогите понять, что происходит.
есть такой код (это уже извраты в процессе отладки, не обращайте внимание на 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) глюки пропадают. при этом очень заметно сокращается объем прошивки!
но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 00:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01339 секунд с 7
ELECTRONIX ©2004-2016