Ошибки #
Ошибка компиляции #
Ошибка (error) возникает на этапе сборки прошивки. Причина может быть в коде, отсутствующей библиотеке, неверно выбранной плате или сломанной установке инструментов. Слева от кнопки "загрузить" есть кнопка с галочкой - проверка (компиляция). Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Плата в этом случае может быть вообще не подключена к компьютеру:
- В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием
- В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, в чём именно проблема
- В скачанных с Интернета скетчах часто возникает ошибка с описанием
название_файла.h no such file or directory. Это означает, что в скетче используется библиотеканазвание_файлаи нужно положить её в папку с библиотеками или установить через менеджер библиотек. Библиотеки всегда можно поискать в гугле поназвание_файла - При использовании особых библиотек, методов или функций ошибкой может стать неправильно выбранная плата в Инструменты/Плата. Например
Mouse.hиKeyboard.hтребуют плату и ядро с поддержкой USB HID, к таким относятся Leonardo и Micro, а также некоторые современные платы с нативным USB - Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание проблемы. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным
- Иногда причиной ошибки бывает слишком старая или слишком новая версия Arduino IDE. Читайте комментарии разработчика скетча
- Ошибка
недостаточно свободного меставозникает по вполне понятным причинам, обратитесь к разработчику проекта. Если это ваш проект - нужно задуматься об оптимизации памяти или переходе на другую плату
Примеры ошибок #
expected ',' or ';'– пропущена запятая или точка запятой на предыдущей строкеstray '\320' in program- кириллические символы в кодеexpected unqualified-id before numeric constant- имя переменной не может начинаться с цифры... was not declared in this scope– переменная или функция используется, но не объявлена, компилятор не может её найтиredefinition of ...- повторное определение функции или переменнойstorage size of ... isn't known- массив задан без указания размераCompilation error: grpc: error while marshaling: string field contains invalid UTF-8- кириллица в пути к скетчу (Arduino IDE v2)
Предупреждения #
Предупреждение (warning) - сообщение компилятора о том, что ему в программе что-то не нравится. Такая программа скомпилируется и загрузится в плату, но её работа может быть нестабильной - предупреждения лучше изучить и исправить:
#pragma message...– это просто сообщения, оставленные разработчиком проекта или библиотеки, чаще всего номер версии и прочая информация. Игнорируйте эти сообщения, исправлять их не нужноНедостаточно памяти, программа может работать нестабильно- возникает при заполнении памяти до некоторых критических пределов, но меньше 100%. Если это ваша программа и вы знаете, что всё будет в порядке - игнорируем
Ошибка загрузки #
Возникает на этапе, когда прошивка собрана, скомпилирована, в ней нет критических ошибок и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов:
- USB кабель, которым подключается плата, должен быть Data-кабелем, а не кабелем только для зарядки
- Если неправильно выбран COM порт – прошивка не загрузится с ошибкой
avrdude: ser_open(): can't open device(AVR Arduino). Вернитесь к выбору и настройке платы из предыдущего урока - Большинство проблем при загрузке, вызванных "зависанием" платы или загрузчика, лечатся переподключением платы
- Причиной ошибки загрузки может быть неправильно выбранная плата в "Инструменты/Плата", а также неправильно выбранный процессор в "Инструменты/Процессор"
- Если у вас открыт монитор COM-порта в другом окне Arduino IDE или плата общается через COM-порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы
- Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам плата общается с компьютером, в том числе для загрузки прошивки
- Если в описании ошибки встречается
bootloader is not respondingилиnot in sync(AVR Arduino), загрузчик не отвечает. Причиной могут быть неверная плата или загрузчик в настройках, занятые RX/TX, кабель, USB-UART преобразователь, сбитый загрузчик и только потом неисправность самого МК - Если появилась красная надпись
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00(AVR Arduino), но прошивка по факту загрузилась – возможно проблемы с USB кабелем/портом/гнездом на плате Arduino, можно попробовать другой кабель или порт
FAQ #
- Ардуину можно прошить только один раз?
- Нет, всё упирается в ресурс Flash памяти. Для классической ATmega328P производитель гарантирует не менее 10 000 циклов записи и стирания, для других МК число нужно смотреть в документации
- Как стереть/нужно ли стирать старую прошивку при загрузке новой?
- Новая прошивка замещает старый код в программной области памяти. EEPROM, файловая система, NVS и другие отдельные области обычно не стираются без специальной команды
- Может ли старая прошивка влиять на новую?
- Старый код не выполняется, но сохранённые отдельно настройки и данные могут остаться и повлиять на новую программу. Для ESP8266/ESP32 в меню платы обычно есть режим полного стирания Flash
- Можно ли записать две прошивки, чтобы они работали вместе?
- Одновременно выполняется одна собранная программа. Из двух прошивок нужно сделать одну общую, причём так, чтобы не было конфликтов - урок
- Можно ли "вытащить" прошивку с уже прошитой Ардуины?
- Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется программа при компиляции, т.е. вам это НИКАК не поможет. Если чтение памяти не заблокировано - прошивку можно скачать с целью загрузки в другой МК такой же модели
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
- Поддержать автора за работу над уроками