ARV 0 16 августа, 2016 Опубликовано 16 августа, 2016 · Жалоба уважаемые профессионалы! помогите понять, что происходит. есть такой код (это уже извраты в процессе отладки, не обращайте внимание на 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) глюки пропадают. при этом очень заметно сокращается объем прошивки! но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 19 августа, 2016 Опубликовано 19 августа, 2016 (изменено) · Жалоба но не понятно, почему никаких ошибок и варнингов на отсутствие библиотеки... Видимо, те же символы линкер находил в какой-то еще из используемых Вами библиотек, и код там не очень адекватный... Смотрите map-файл, там много полезной информации о том, откуда что взяли... Изменено 19 августа, 2016 пользователем alx2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 25 августа, 2016 Опубликовано 25 августа, 2016 · Жалоба код там не очень адекватный... код вполне адекватный, просто при отладке в протеусе невозможно просмотреть состояние переменных, если они локальные для функции. поэтому пришлось простейшее выражение разбивать на отдельные этапы вычисления, чтобы понять, в какой момент возникают чудеса. причина чудес все равно остается неизвестной... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 19 сентября, 2016 Опубликовано 19 сентября, 2016 · Жалоба код вполне адекватныйВам не про Ваш код говорили, про код, реализующий операции над флоатами не из libm... По поводу доверия к этой весьма древней сборке. В ней полно проблем, которые уже давно устранены в более свежих сборках (есть совсем свежак от этого лета). https://sourceforge.net/projects/mobileches...hots%20(Win32)/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба В ней полно проблем, которые уже давно устранены в более свежих сборках (есть совсем свежак от этого лета). https://sourceforge.net/projects/mobileches...hots%20(Win32)/ у меня вечно какие-то проблемы с новыми сборками... во-первых, я привык к понятию апгрейда, т.е. накатыванию свежего поверх старого с получением плюшек. в случае avr-gcc это не прокатывает: старый код перестает компилироваться (хоть и по банальным причинам, но все-таки), куда-то что-то пропадает и т.п. во-вторых, по неизвестным причинам некоторые вещи меняются крайне радикально и в не удобную сторону. например, avr-size вдруг начинает выводить информацию вообще каким-то странным форматом, что не только сналету не понятно, какой объем кода получился, но и после детального анализа вопросы остаются... в третьих, Eclipse... я установил в него плагин AVR и успешно им пользуюсь с WinAVR. после установки новой версии компилятора у меня вечно проблемы с интеграцией в Eclipse с существующими плагинами... не могли бы вы как-то помочь мне "обновиться", чтобы при этом вышеупомянутые проблемы были решены "малой кровью"? я ж не профессионал, многих вещей не знаю, методом тыка все освоил... но современные продукты становятся слишком сложными, чтобы метод тыка давал хорошие результаты в разумное время... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 24 ноября, 2016 Опубликовано 24 ноября, 2016 · Жалоба старый код перестает компилироваться (хоть и по банальным причинам, но все-таки), куда-то что-то пропадает и т.п. Радикальных изменений пара: Сделали нормальную работу с данными во FLASH - соответственно, много пришлось поправить (в чужом коде const добавлять). Очень приличная оптимизация - код, где есть данные с доступом из обработчиков прерываний, при несоблюдении правил оптимизируется в ничто. Это всё правится один раз. Я пережил это... Кроме того, то что получиться будет проще портироваться на другие процессоры (с очень качественными компиляторами, например ARM с arm-none-eabi-gcc). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 24 ноября, 2016 Опубликовано 24 ноября, 2016 · Жалоба Спасибо. Пытаюсь понять сам, ковыряясь в новых версиях, что стало иным. Но под "куда-то что-то пропадает" я имел ввиду, например, avrdude, который то есть, то нет. или другие вспомогательные утилиты... И в WinAVR была вполне себе толковая документация по avr-libc, да и по самому GCC тоже, а в новых сборках нет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 24 ноября, 2016 Опубликовано 24 ноября, 2016 · Жалоба я имел ввиду, например, avrdude, который то есть, то нет.WinAVR был сборной солянкой, мухи и котлеты в одном флаконе. Вы имели 100 мегабайт архива из которых половину не использовали. Просто один человек дергал их всех вместе из разных мест и складывал в один мешок. Да, конечно, многие хотят большую зеленую кнопку "сделать мне хорошо!". На самом же деле это совершенно независимые инструменты и любой человек в состоянии скачать их из разных мест самостоятельно. На компилятор вам ссылку уже дали. Компилятор gcc идет в комплекте с binutils (ассемблер as, линкер ld, библиотекарь ar, утилиты преобразования объектных файлов objcopy, objdump и т.п.) и библиотекой avr-libc, потому что он от них зависит. Самая свежая документация на компилятор, binutils и avr-libc лежит на сайтах этих программ и легко гуглится. Самый свежий make и утилиты работы с файлами берутся из msys (сейчас уже msys2), гуглится. Самая свежая дудка лежит на своем сайте и тоже легко гуглится. Нужен компилятор посвежее - обновили только компилятор. Нужна дудка с поддержкой нового кристалла - обновили только дудку. Ну в самом деле, изюм же не только в булочках продается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 24 ноября, 2016 Опубликовано 24 ноября, 2016 · Жалоба Из радикальных изменений вспоминается всего два: 1) Добавлено ключевое слово __flash. 2) avr-libc претерпел изменения в части компоновки библиотек: раньше цеплялась либа на всё семейство, а теперь для каждого таргета своя либа: MCU = atmega128 .... LDFLAGS += -l$(MCU) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться