View Categories

Ошибки и частые вопросы

Ошибки #

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

Ошибка (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 памяти, а он довольно большой - несколько десятков тысяч раз. В то же время существуют некоторые китайские микроконтроллеры, которые можно прошить только один раз - я не видел "Ардуино"-плат на их основе
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой?
    • Новая прошивка автоматически замещает старую при загрузке
  • Можно ли записать две прошивки, чтобы они работали вместе?
    • Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну общую программу, причём так, чтобы не было конфликтов
  • Можно ли "вытащить" прошивку с уже прошитой Ардуины?
    • Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется программа при компиляции, т.е. вам это НИКАК не поможет. Если чтение памяти не заблокировано - прошивку можно скачать с целью загрузки в другой МК такой же модели
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх