Комментарии 18
Недавно пересел с Arduino Studio на AVR Studio, которая использует Visual Studio 2012, и соответственно позволяем создавать нормальные проекты, использовать автодополнения, форматирование, переходы по коду. И которая умеет работать с более обширным списком железа.
Я вообще в шоке от Arduino IDE. То, что я описал в статье вообще не укладывается в голове. Невозможно перейти с 1.6.5 на 1.6.7, среда видит 4 библиотеки, а пятую — не видит, хоть убей. При возврате на 1.6.5 — проект перестаёт компилироваться.
С переменными вообще непонятно, что делать — их значения выдаются «с потолка», а про выборочную (!) условную компиляцию я вообще молчу.
И самое плохое то, что это не «прокол», а система и улучшений ждать не приходится. Волей-неволей задумаешься о переходе на AVR Studio.
С переменными вообще непонятно, что делать — их значения выдаются «с потолка», а про выборочную (!) условную компиляцию я вообще молчу.
И самое плохое то, что это не «прокол», а система и улучшений ждать не приходится. Волей-неволей задумаешься о переходе на AVR Studio.
Это нонсенс! До последнего времени я считал, что это невозможно, но (весёлые) разработчики среды программирования Arduino не дают нам скучать, но обо всём по порядку.
Оооо, как раз тут радовался в Makefile'ах OpenWRT.
Конструкция
define Download/package1
URL:=blah-blah-blah
blah-blah-blah
endef
define Build/package2
ifeq (условие)
$(call Download,package1))
blah-blah-blah
endif
blah-blah-blah
endef
Скачивает package1 всегда. Независимо от выполнения вызова, обёрнутого в ifeq. Просто на всякий случай. Дошло до этого макроса — скачало. Ничего с ним больше не делает, но скачивает. Более того, если вообще всю секцию Download/package1 обернуть в ifeq, то оно ещё и ругается, что хочет скачать, но URL'а нету.
Игнорирование #define в сишном коде — круче однозначно, но всё же, всё же. Четверть часа не мог понять, почему сборка прошивки останавливается на попытке скачать исходники с лежащего сайта, если использование этих исходников в явном виде выключено везде, где его только можно выключить.
Да… будем знать, что компилятор нужно ещё проверять. Я как-то уже привык, что всё делается правильно, тут такое…
А с переменными, вообще слов нет:
а = 0;
print a
808333615
%()
А с переменными, вообще слов нет:
а = 0;
print a
808333615
%()
Imho внутрисхемная отладка при сколько-нибудь масштабном проекте просто необходима. Иначе время потребное на поиск сбоя начинает расти в совсем неприличных размерах. Ну, в случае с ArduinoIDE остаётся только найти в %TEMP% каталог с собранным проектом и натравить на ELF-файл objdump из потрохов ArduinoIDE ( avr-objdump -S projectname.elf > projectname.lss) получив при этом ассемблерный листинг прошивки с cpp-вставками помогающими понять что данный блок кода делает.
Это да, но тут речь идёт о том, IDE ведёт себя совершенно неприемлемо. У меня требования совсем минимальные — чтобы можно было просто заниматься проектом, а не думать о бесконечных багах.
Переменная errorsHttpSend так и висит в проекте и показывает совершенно безумные значения. И я не знаю, что с ней делать. Она просто объявлена и ей присвоено значение 0. А дальше с ней не производится никаких действий, она просто выводится на печать. И показывает разные 6-и — 8-и значные значения. И что дальше делать?
Такое поведение похоже на нехватку памяти, но это Due и память используется всего процентов на 15.
Переменная errorsHttpSend так и висит в проекте и показывает совершенно безумные значения. И я не знаю, что с ней делать. Она просто объявлена и ей присвоено значение 0. А дальше с ней не производится никаких действий, она просто выводится на печать. И показывает разные 6-и — 8-и значные значения. И что дальше делать?
Такое поведение похоже на нехватку памяти, но это Due и память используется всего процентов на 15.
О, мой Бог! О, мой Бог!
У макетка второго типа, с разорванным питанием. Вчера убил более 3 часов на поиск проблемы.
В проекте используется компас HMC5883L, общается по I2C. До этого датчик был протестирован и отложен в сторону. Сейчас пришло время его применить. Макетка обросла подключениями и датчик попал на вторую половину макетки.
В итоге ардуино намертво виснет при попытке пообщаться с HMC5883L. Только сейчас обнаружил, что на нем не было питания все это время. Разрыв реально в упор не видел все это время. Уже даже поверил, что датчик умудрился скончаться пока дожидался применения )
У макетка второго типа, с разорванным питанием. Вчера убил более 3 часов на поиск проблемы.
В проекте используется компас HMC5883L, общается по I2C. До этого датчик был протестирован и отложен в сторону. Сейчас пришло время его применить. Макетка обросла подключениями и датчик попал на вторую половину макетки.
В итоге ардуино намертво виснет при попытке пообщаться с HMC5883L. Только сейчас обнаружил, что на нем не было питания все это время. Разрыв реально в упор не видел все это время. Уже даже поверил, что датчик умудрился скончаться пока дожидался применения )
Иначе, как приколом это назвать трудно, но на практике всё очень жестоко — поди догадайся, что половина схемы без питания, хотя перемычки прекрасно видны. А ещё возможны «интересные» варианты с подачей одной земли или одного питания без земли. Если есть связь через другие элементы схемы, то глюки будут ещё интереснее.
Наблюдая за развитием проекта, я превратился из скептика в поклонника. Но, очень не хватает описания железной части. В частности, как раз всего обвеса для мониторинга нагрузки, напряжения, частоты на 220.
Если в проекте имеется несколько ino-файлов, то в Arduinо IDE нет проблем, а как работать с таким проектом в Atmel Studio?
Вы, конечно, извините, но такого быть не может. Если Вы всерьез считаете, что gcc способен на такие баги, как в печатью errorsHttpSend, то Вы сильно недооцениваете степень профессионализма разработчиков GNU. Приведите полный код, а не обрывок и с вероятностью 99% в нем будет классическая ошибка переполнения буфера. Я не адепт Ардуино, но такой наезд требует доказательств.
Боюсь, что это вы прибываете в иллюзиях относительно среды Ардуино. Глюк на глюке глюком погоняет, поверьте мне, как человеку, который по сто раз на дню компилирует проект и отвечает на вопросы пользователей.
А полный исходный код доступен — это 0.14 версия АМС.
А полный исходный код доступен — это 0.14 версия АМС.
Можно ссылочку на исходники? Где неверно значение переменной получается?
Вот ссылка на исходники. Архив 0.14 для Due.
http://hi-lab.ru/arduino-mega-server/details/download
Но! Я с неделю промучился с переменной и перед релизом просто выкинул её из дистрибутива и отказался от идеи подсчитывать сетевые ошибки. Можете попробовать воспроизвести ошибку, но не факт, что получится — дефект ещё и плавающий.
http://hi-lab.ru/arduino-mega-server/details/download
Но! Я с неделю промучился с переменной и перед релизом просто выкинул её из дистрибутива и отказался от идеи подсчитывать сетевые ошибки. Можете попробовать воспроизвести ошибку, но не факт, что получится — дефект ещё и плавающий.
И по поводу условной компиляции — почему то моя Ардуино среда вполне себе нормально отключила компиляцию всего фрагмента кода. Что я не так делаю? Если это была такая шутка, то она совсем не смешная.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Новогодние приколы от проекта Arduino Mega Server