Ошибки #
Ошибка компиляции #
Ошибка (error) Возникает на этапе сборки и компиляции прошивки. Ошибки компиляции вызваны проблемами в коде программы, то есть проблема сугубо программная. Слева от кнопки "загрузить" есть кнопка с галочкой – проверка (компиляция). Во время проверки производится компиляция прошивки и выявляются ошибки, если таковые имеются. Плата в этом случае может быть вообще не подключена к компьютеру:
- В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием
- В чёрном окошке в самом низу Arduino IDE можно прочитать полный текст ошибки и понять, куда копать
- В скачанных с Интернета скетчах часто возникает ошибка с описанием
название_файла.h no such file or directory
. Это означает, что в скетче используется библиотеканазвание_файла
и нужно положить её в папку с библиотеками или установить через менеджер библиотек. Библиотеки всегда можно поискать в гугле поназвание_файла
- При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в Инструменты/плата. Пример: прошивки с библиотекой
Mouse.h
илиKeyboard.h
компилируются только для плат Leonardo и Micro - Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание проблемы. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным
- Иногда причиной ошибки бывает слишком старая или слишком новая версия 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
- массив задан без указания размера
Предупреждения #
Предупреждение (warning) - сообщение компилятора о том, что ему в программе что-то не нравится. Такая программа скомпилируется и загрузится в плату, но её работа может быть нестабильной - предупреждения лучше изучить и исправить:
#pragma message...
– это просто сообщения, оставленные разработчиком проекта или библиотеки, чаще всего номер версии и прочая информация. Игнорируйте эти сообщения, исправлять их не нужноНедостаточно памяти, программа может работать нестабильно
- возникает при заполнении памяти до некоторых критических пределов, но меньше 100%. Если это ваша программа и вы знаете, что всё будет в порядке - игнорируем
Ошибка загрузки #
Возникает на этапе, когда прошивка собрана, скомпилирована, в ней нет критических ошибок и производится загрузка в плату по кабелю. Ошибка может возникать как по причине неисправностей железа, так и из-за настроек программы и драйверов:
- USB кабель, которым подключается плата, должен быть Data-кабелем, а не кабелем только для зарядки
- Если неправильно выбран COM порт – прошивка не загрузится с ошибкой
avrdude: ser_open(): can't open device
(AVR Arduino). Вернитесь к выбору и настройке платы из предыдущего урока - Большинство проблем при загрузке, вызванных "зависанием" платы или загрузчика, лечатся переподключением платы
- Причиной ошибки загрузки может быть неправильно выбранная плата в "Инструменты/Плата", а также неправильно выбранный процессор в "Инструменты/Процессор"
- Если у вас открыт монитор COM порта в другом окне Arduino IDE или плата общается через СОМ порт с другой программой (Ambibox, HWmonitor, SerialPortPlotter и т.д.), то вы получите ошибку загрузки, потому что порт занят. Отключитесь от порта или закройте другие окна и программы
- Если у вас задействованы пины RX или TX – отключите от них всё! По этим пинам плата общается с компьютером, в том числе для загрузки прошивки
- Если в описании ошибки встречается
bootloader is not responding
иnot in sync
(AVR Arduino), а все предыдущие пункты этого списка проверены – с вероятностью 95% микроконтроллер "сломался". Оставшиеся 5% – "слетел" загрузчик, и его можно прошить заново - Если появилась красная надпись
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x00
(AVR Arduino), но прошивка по факту загрузилась – возможно проблемы с USB кабелем/портом/гнездом на плате Arduino, можно попробовать другой кабель или порт
FAQ #
- Ардуину можно прошить только один раз?
- Нет, всё упирается в ресурс Flash памяти, а он довольно большой - несколько десятков тысяч раз. В то же время существуют некоторые китайские микроконтроллеры, которые можно прошить только один раз - я не видел "Ардуино"-плат на их основе
- Как стереть/нужно ли стирать старую прошивку при загрузке новой?
- Новая прошивка автоматически замещает старую при загрузке
- Можно ли записать две прошивки, чтобы они работали вместе?
- Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну общую программу, причём так, чтобы не было конфликтов
- Можно ли "вытащить" прошивку с уже прошитой Ардуины?
- Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется программа при компиляции, т.е. вам это НИКАК не поможет. Если чтение памяти не заблокировано - прошивку можно скачать с целью загрузки в другой МК такой же модели