Pull to refresh

Comments 18

Недавно пересел с Arduino Studio на AVR Studio, которая использует Visual Studio 2012, и соответственно позволяем создавать нормальные проекты, использовать автодополнения, форматирование, переходы по коду. И которая умеет работать с более обширным списком железа.
Я вообще в шоке от Arduino IDE. То, что я описал в статье вообще не укладывается в голове. Невозможно перейти с 1.6.5 на 1.6.7, среда видит 4 библиотеки, а пятую — не видит, хоть убей. При возврате на 1.6.5 — проект перестаёт компилироваться.

С переменными вообще непонятно, что делать — их значения выдаются «с потолка», а про выборочную (!) условную компиляцию я вообще молчу.

И самое плохое то, что это не «прокол», а система и улучшений ждать не приходится. Волей-неволей задумаешься о переходе на 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

%()
Imho внутрисхемная отладка при сколько-нибудь масштабном проекте просто необходима. Иначе время потребное на поиск сбоя начинает расти в совсем неприличных размерах. Ну, в случае с ArduinoIDE остаётся только найти в %TEMP% каталог с собранным проектом и натравить на ELF-файл objdump из потрохов ArduinoIDE ( avr-objdump -S projectname.elf > projectname.lss) получив при этом ассемблерный листинг прошивки с cpp-вставками помогающими понять что данный блок кода делает.
Это да, но тут речь идёт о том, IDE ведёт себя совершенно неприемлемо. У меня требования совсем минимальные — чтобы можно было просто заниматься проектом, а не думать о бесконечных багах.

Переменная errorsHttpSend так и висит в проекте и показывает совершенно безумные значения. И я не знаю, что с ней делать. Она просто объявлена и ей присвоено значение 0. А дальше с ней не производится никаких действий, она просто выводится на печать. И показывает разные 6-и — 8-и значные значения. И что дальше делать?

Такое поведение похоже на нехватку памяти, но это Due и память используется всего процентов на 15.
О, мой Бог! О, мой Бог!
У макетка второго типа, с разорванным питанием. Вчера убил более 3 часов на поиск проблемы.
В проекте используется компас HMC5883L, общается по I2C. До этого датчик был протестирован и отложен в сторону. Сейчас пришло время его применить. Макетка обросла подключениями и датчик попал на вторую половину макетки.
В итоге ардуино намертво виснет при попытке пообщаться с HMC5883L. Только сейчас обнаружил, что на нем не было питания все это время. Разрыв реально в упор не видел все это время. Уже даже поверил, что датчик умудрился скончаться пока дожидался применения )
Иначе, как приколом это назвать трудно, но на практике всё очень жестоко — поди догадайся, что половина схемы без питания, хотя перемычки прекрасно видны. А ещё возможны «интересные» варианты с подачей одной земли или одного питания без земли. Если есть связь через другие элементы схемы, то глюки будут ещё интереснее.
Наблюдая за развитием проекта, я превратился из скептика в поклонника. Но, очень не хватает описания железной части. В частности, как раз всего обвеса для мониторинга нагрузки, напряжения, частоты на 220.
Всё только начинается. Если вы ещё немного понаблюдаете за проектом, то станете его «фанатом». :) Вы абсолютно правы насчёт железа и описания и в ближайшем времени пойдёт волна оформления проекта в соответствии с планом развития. Просто невозможно всё делать одновременно и на одном энтузиазме.
Если в проекте имеется несколько ino-файлов, то в Arduinо IDE нет проблем, а как работать с таким проектом в Atmel Studio?
Проект разрабатывался в «родной» Arduinо IDE и про сторонние вообще речи не шло. Как работать в Atmel Studio я не знаю, но наверное как-то можно — я мельком видел скриншот проекта в какой-то IDE от Microsoft. А вообще, Arduinо IDE меня сильно разочаровала — один глюк на другом, третьим погоняет.
Вы, конечно, извините, но такого быть не может. Если Вы всерьез считаете, что gcc способен на такие баги, как в печатью errorsHttpSend, то Вы сильно недооцениваете степень профессионализма разработчиков GNU. Приведите полный код, а не обрывок и с вероятностью 99% в нем будет классическая ошибка переполнения буфера. Я не адепт Ардуино, но такой наезд требует доказательств.
Боюсь, что это вы прибываете в иллюзиях относительно среды Ардуино. Глюк на глюке глюком погоняет, поверьте мне, как человеку, который по сто раз на дню компилирует проект и отвечает на вопросы пользователей.

А полный исходный код доступен — это 0.14 версия АМС.
Можно ссылочку на исходники? Где неверно значение переменной получается?
Вот ссылка на исходники. Архив 0.14 для Due.

http://hi-lab.ru/arduino-mega-server/details/download

Но! Я с неделю промучился с переменной и перед релизом просто выкинул её из дистрибутива и отказался от идеи подсчитывать сетевые ошибки. Можете попробовать воспроизвести ошибку, но не факт, что получится — дефект ещё и плавающий.
И по поводу условной компиляции — почему то моя Ардуино среда вполне себе нормально отключила компиляцию всего фрагмента кода. Что я не так делаю? Если это была такая шутка, то она совсем не смешная.
Я тоже могу ошибаться и этот вопрос нужно просто выяснить отдельно. Как дойдут руки до проверки — отпишусь о результате.
Sign up to leave a comment.

Articles