Первая прошивка, ошибки, FAQ

Итак, разобрались со средой разработки, теперь можно загрузить первую прошивку. Можно загрузить пустую прошивку, чтобы просто убедиться, что все драйвера установились и платы вообще прошиваются. Рекомендуется делать это с новой платой, к которой никогда не подключались датчики и модули, чтобы исключить выход платы из строя по вине пользователя.

1. Плата подключается к компьютеру по USB, на ней должны замигать светодиоды. Если этого не произошло:

2. Компьютер издаст характерный сигнал подключения нового оборудования, а при первом подключении появится окошко “Установка нового оборудования”. Если этого не произошло:

3. В списке портов (Arduino IDE/Инструменты/Порт) появится новый порт, обычно COM3. Если этого не произошло:

4. Выбираем свою плату. Если это Arduino Nano, выбираем в Инструменты\Плата\Arduino Nano. Если другая – выбираем другую. Нажимаем стрелочку в левом верхнем углу (загрузить прошивку). Да, загружаем пустую прошивку.

Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно.

Ошибки компиляции

Возникает на этапе сборки и компиляции прошивки. Ошибки компиляции вызваны проблемами в коде прошивки, то есть проблема сугубо софтварная. Слева от кнопки “загрузить” есть кнопка с галочкой – проверка. Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Ардуино в этом случае может быть вообще не подключена к компьютеру.

Частые ошибки в коде, приводящие к ошибке компиляции

Ошибки загрузки

Возникают на этапе, когда прошивка собрана, скомпилирована, в ней нет критических ошибок, и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов.

Предупреждения

Помимо ошибок, по причине которых проект вообще не загрузится в плату и не будет работать, есть ещё предупреждения, которые выводятся оранжевым текстом в чёрной области лога ошибок. Предупреждения могут появиться даже тогда, когда выше лога ошибок появилась надпись “Загрузка завершена“. Это означает, что в прошивке нет несовместимых с жизнью ошибок, она скомпилировалась и загрузилась в плату. Что же тогда означают предупреждения? Чаще всего можно увидеть такие:

Завершая раздел Введение в Arduino поговорим о вопросах, которые очень часто возникают у новичков:

Видео

Arduino IDE: почему не компилируются скетчи (и как этого избежать)

image

Поскольку я интенсивно занимаюсь разработкой в Arduino IDE, то этот вопрос меня неподдельно волновал. Почему скетч, написанный в одной версии среды разработки отказывается компилироваться в соседних версиях? Этим же вопросом меня заваливали пользователи системы Arduino Mega Server. Почему АМС компилируется в 1.6.5 и отказывается компилироваться в 1.6.4, 1.6.7 и 1.6.8?

И вот недавно, в процессе портирования Arduino Mega Server на новый контроллер Genuino 101, мне удалось разгадать эту великую загадку. И в этой статье я поделюсь с вами этим сакральным знанием и ваши скетчи после этого всегда будут успешно компилироваться. Итак…

Логика вещей

По логике вещей, код, который успешно компилируется в какой-либо версии среды разработки, например, 1.6.5, обязан компилироваться в соседних версиях IDE, ведь эти версии отличаются только в третьем знаке и представляют собой почти одно и то же, с небольшими модификациями. Но этого не происходит. Почему?

Внутренняя кухня

Чтобы это понять, нужно разобраться с тем, как формируются версии сред разработки Arduino IDE и как пользователи работают с этими средами разработки.

Начнём с пользователей. Большинство из них компилирует примитивные проекты, образно говоря, в 20 строк и с этими проектами никаких проблем не возникает. Эти проекты успешно компилируются в любой версии IDE потому, что используют только стандартные вызовы библиотечных функций и никак не модифицируют сами библиотеки.

Но сколько-нибудь развитый проект на Ардуино уже не умещается в «20 строк» и неизбежно пользуется менее распространёнными функциями из библиотек (которые более подвержены модификациям из версии в версию) и неизбежно приходят к необходимости модификации самих библиотек под свои специфические нужды проекта.

А один раз модифицировав системную библиотеку, вы становитесь её заложником и вынуждены «тащить» её за собой из версии в версию.

Теперь давайте разберёмся с тем, как формируются версии Arduino IDE. А формируются они по произволу (я подозреваю, что в конечном счёте, одного конкретного программиста, какого-нибудь Марио) выпускающей команды. И то, какая версия конкретной библиотеки будет включена в дистрибутив и в каком виде (с какими модификациями), остаётся на совести этого «Марио».

А теперь внимание, это очень важно! Выпускающая команда преследует только одну цель — чтобы дистрибутив одной версии был взаимно согласован и непротиворечив внутри себя. Их задача добиться того, чтобы все стандартные примеры работали корректно. И это всё! Задача совместимости между версиями вообще не ставится.

И поскольку 99% процентов пользователей компилирует проекты в «20 строк» этот подход прекрасно «прокатывает» на практике. А то, что сколько-нибудь серьёзные проекты не компилируются, это проблемы этих проектов. Слава Богу, теперь понятен механизм возникновения проблемы и теперь стало понятно, как с этим бороться.

Конкретный пример

image

Вспомним портирование АМС на Genuino 101 (работает начиная с версии 1.6.7 и выше). Тут команда Ардуино припасла для нас очередной прикол (молодцы ребята, не дают нам расслабляться).

Попытка откомпилировать проект для нового контроллера приводила к появлению множества ошибок компилятора. Анализ сообщений показал, что компилятору категорически не нравится наша Ethernet библиотека. Чем же она так не угодила компилятору?

Наша библиотека: version=1.0.4 (не нравится компилятору)
Библиотека из IDE 1.6.7: version=1.0.4 (нравится компилятору)

Наша библиотека: 31 файл (не нравится компилятору)
Библиотека из IDE 1.6.7: 31 файл (нравится компилятору)

Наша библиотека: 123 КБ (не нравится компилятору)
Библиотека из IDE 1.6.7: 123 КБ (нравится компилятору)

Другими словами, Марио «засунул» в IDE 1.6.7 Ethernet библиотеку с одним и тем же номером версии, что и в IDE 1.6.5, одним и тем же количеством файлов и с одним и тем же размером, но с РАЗНЫМ СОДЕРЖИМЫМ и забыл нас об этом предупредить. А это самое «разное содержимое» как паук держится своими лапками за IDE и другие библиотеки более низкого уровня (тоже модифицированные в 1.6.7).

Браво, Марио! С таким подходом ничего не будет компилироваться, кроме стандартных примеров и скетчей в 20 строк.

Практическое решение (головоломок от Ардуино)

Теперь стал кристально ясен механизм того, почему не компилируются проекты в разных версиях Arduino IDE и, соответственно, так же кристально стал ясен путь решения этой проблемы. В данном конкретном случае решение состоит из трёх частей.

Источники:

https://alexgyver. ru/lessons/first-flash/

https://habr. com/ru/post/392931/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: