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

 
 
> 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
 
Start new topic
Ответов
ARV
сообщение Nov 24 2016, 08:03
Сообщение #2


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

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



Спасибо. Пытаюсь понять сам, ковыряясь в новых версиях, что стало иным. Но под "куда-то что-то пропадает" я имел ввиду, например, avrdude, который то есть, то нет. или другие вспомогательные утилиты... И в WinAVR была вполне себе толковая документация по avr-libc, да и по самому GCC тоже, а в новых сборках нет...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2016, 08:50
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ARV @ Nov 24 2016, 11:03) *
я имел ввиду, например, avrdude, который то есть, то нет.
WinAVR был сборной солянкой, мухи и котлеты в одном флаконе. Вы имели 100 мегабайт архива из которых половину не использовали. Просто один человек дергал их всех вместе из разных мест и складывал в один мешок. Да, конечно, многие хотят большую зеленую кнопку "сделать мне хорошо!". На самом же деле это совершенно независимые инструменты и любой человек в состоянии скачать их из разных мест самостоятельно. На компилятор вам ссылку уже дали. Компилятор gcc идет в комплекте с binutils (ассемблер as, линкер ld, библиотекарь ar, утилиты преобразования объектных файлов objcopy, objdump и т.п.) и библиотекой avr-libc, потому что он от них зависит. Самая свежая документация на компилятор, binutils и avr-libc лежит на сайтах этих программ и легко гуглится. Самый свежий make и утилиты работы с файлами берутся из msys (сейчас уже msys2), гуглится. Самая свежая дудка лежит на своем сайте и тоже легко гуглится. Нужен компилятор посвежее - обновили только компилятор. Нужна дудка с поддержкой нового кристалла - обновили только дудку.
Ну в самом деле, изюм же не только в булочках продается...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 15:34
Рейтинг@Mail.ru


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