Откуда берутся баги и кто в этом виноват? arduino+

Откуда берутся баги и кто в этом виноват? arduino+

  • Уроки
  • Введение в Arduino
  • Первая прошивка, ошибки, FAQ

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

Выбираем плату согласно своей плате. Если у вас Nano, то в новых версиях IDE нужно выбрать процессор 328p Old Bootloader. Далее выбираем порт, отличный от COM1 (т.к. это системный) и нажимаем кнопку загрузить. Если появилась надпись “Загрузка завершена” – значит всё в порядке и можно прошивать другие скетчи. В любом случае на вашем пути встретятся другие два варианта событий, происходящих после нажатия на кнопку “Загрузка” – это ошибка компиляции и ошибка загрузки. Вот их давайте рассмотрим более подробно

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

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

  • В некоторых случаях ошибка возникает при наличии кириллицы (русских букв) в пути к папке со скетчем. Решение: завести для скетчей отдельную папочку в корне диска с английским названием.
  • В чёрном окошке в самом низу Arduino > .h no such file or directory . Это означает, что в скетче используется библиотека , и нужно положить её в Program Files/Arduino/libraries/. Ко всем моим проектам всегда идёт папочка с использованными библиотеками, которые нужно установить. Также библиотеки всегда можно поискать в гугле по .
  • При использовании каких-то особых библиотек, методов или функций, ошибкой может стать неправильно выбранная плата в “Инструменты/плата“. Пример: прошивки с библиотекой Mouse.h или Keyboard.h компилируются только для Leonardo и Micro.
  • Если прошивку пишете вы, то любые синтаксические ошибки в коде будут подсвечены, а снизу в чёрном окошке можно прочитать более детальное описание, в чём собственно косяк. Обычно указывается строка, в которой сделана ошибка, также эта строка подсвечивается красным.
  • Иногда причиной ошибки бывает слишком старая, или слишком новая версия Arduino />

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

  • USB кабель, которым подключается Arduino, должен быть Data-кабелем, а не кабелем только для зарядки. Нужным нам кабелем подключаются к компьютеру плееры и смартфоны.
  • Причиной ошибки загрузки являются не установленные/криво установленные драйвера CH340, если у вас китайская NANO.
  • Также будет ошибка avrdude: ser_open(): can’t open device , если не выбран COM порт, к которому подключена Arduino. Если кроме COM1 других портов нет – читай два пункта выше, либо попробуй другой USB порт, или вообще другой компьютер.
  • Большинство проблем при загрузке, вызванных “зависанием” ардуины или загрузчика, лечатся полным отключением ардуины от питания. Потом вставляем USB и по новой прошиваем.
  • Причиной ошибки загрузки может быть неправильно выбранная плата в “Инструменты/Плата”, а также неправильно выбранный процессор в “Инструменты/Процессор”. Также в свежих версиях >bootloader is not responding и not in sync , а все предыдущие пункты этого списка проверены – с вероятностью 95% сдох загрузчик. Второй неприятный исход – загрузчик “слетел”, и его можно прошить заново.

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

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

  • # Pragma message……. – сообщения с директивой Pragma обычно выводят библиотеки, сообщая о своей версии или каких-то настройках
  • Недостаточно памяти, программа может работать нестабильно – Чуть выше этого предупреждения обычно идёт информация о задействованной памяти. Память устройства можно добивать до 99%, ничего страшного не случится. Это флэш память и во время работы она не изменяется. А вот динамическую память желательно забивать не более 85-90%, иначе реально могут быть непонятные глюки в работе, так как память постоянно “бурлит” во время работы. НО. Это зависит от скетча и в первую очередь от количества локальных переменных. Можно написать такой код, который будет стабильно работать при 99% занятой SRAM памяти. Так что ещё раз: это всего лишь предупреждение, а не ошибка.

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

  • Ардуину можно прошить только один раз? Нет, несколько десятков тысяч раз, всё упирается в ресурс flash памяти. А он довольно большой.
  • Как стереть/нужно ли стирать старую прошивку при загрузке новой? Память автоматически очищается при прошивке, старая прошивка автоматически удаляется.
  • Можно ли записать две прошивки, чтобы они работали вместе? Нет, при прошивке удаляются абсолютно все старые данные. Из двух прошивок нужно сделать одну, причём так, чтобы не было конфликтов.
  • Можно ли “вытащить” прошивку с уже прошитой Ардуины? Теоретически можно, но только в виде нечитаемого машинного кода, в который преобразуется прошивка на С++ при компиляции, т.е. вам это НИКАК не поможет, если вы не имеете диплом по низкоуровневому программированию.
    • Зачем это нужно? Например есть у нас прошитый девайс, и мы хотим его “клонировать”. В этом случае да, есть вариант сделать дамп прошивки и загрузить его в другую плату на таком же микроконтроллере.
    • Если есть желание почитать код – увы, прошивка считывается в виде бинарного машинного кода, превратить который обратно в читаемый Си-подобный код обычному человеку не под силу
    • Вытащить прошивку, выражаясь более научно – сделать дамп прошивки, можно при помощи ISP программатора, об этом можно почитать здесь
    • Снять дамп прошивки можно только в том случае, если разработчик не ограничил такую возможность, например записав лок-биты, запрещающие считывание Flash памяти, или вообще отключив SPI шину. Если же разработчик – вы, и есть желание максимально защитить своё устройство от копирования – гуглите про лок-биты и отключение SPI

Откуда берутся баги и кто в этом виноват?

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

Виды багов

Явные баги – это те ошибки, которые бросаются в глаза моментально.

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

Визуальные баги могут не влиять на внутренние механизмы обработки команд, но способны доставить сильно дискомфорт юзеру: например, не сворачиваемые и не убираемые диалоговые окна (убрать можно только перезагрузив программу) или визуальные артефакты, периодически проявляющиеся на мониторе (в ряде случаев виновата видеокарта).

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

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

Как поступать, если вы заметили ошибку?

Для начала нужно обновить программу, так как обновления выпускаются с целью исправить существующие баги в старой версии софта.

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

Если ошибка возникает из-за ряда ваших последовательных действий (может быть такое, когда вы пользуетесь инструментом не по назначению), больше так не делайте! Постарайтесь в дальнейшем не создавать подобных ситуаций.

Arduino.ru

Функции прерывания ЧТо ЭТО, откуда берутся.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Изучаю прерывания ,в функции attachInterrupt
В ней я так понял есть три параметра номер прерывания,функция прерывания и режим прерывания.Вот проблема,не могу понять откуда берутся эти функции.Например функция count_pulse считает импульсы для обработчика прерываний эту функцию откуда-то взяли где-то они задекларированы?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Возможно придумали так чтобы при срабатывании прерывания вызывалась какая-то функция?
Возможно это будет ваша любимая функция.
Возможно для себя её нужно и написать самому?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

В файлах ядра Arduino IDE (arduinohardwarearduinoavrcoresarduino).
Например функция attachInterrupt() задекларирована в WInterrupts.c

Также это может быть пользовательская функция, которая задекларирована прямо в скетче или в заголовочном файле *.h, который подключенм к скетчу через #include.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

То_есть это получается как бы имя константы которую я сам общываю как хочу?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А вы переменную от функции отличаете?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Найдите 2 раза слово “blink”

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

извините то_есть в функции attachInterrupt я могу обозвать функцию как захочу?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Тут функция blink не возвращает значения)Вот сама функция blink то есть ее название где задекларированы?чем мне руководствоваться при написании программы?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Ага то-есть задаётся функция.Могу назвать ее хоть именем своим для того что бы использовать в обработчике?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

госспадя, ты б хоть почитал чонить, перед тем как на форум лезть. А не только посмотрел мультики гайвера.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Да. Правильнее наверное сказать, что Вы свою функцию можете называть как хотите (в пределах правил языка конечно). А в функцию attachInterrupt в качестве параметра передаёте имя Вашей функции. И то, что она значения не возвращает – это правильно.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

// обработка прерывания – получить кол-во импульсов
//
void count_pulse()
<
detachInterrupt(0);
money++;
if(money==1)
timeCount=millis();
attachInterrupt(0,count_pulse,FALLING);
>

Код данного скетча находится в п

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

После отключения прерывания происходят какие-то операции для чего они?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Сергей Данилов, вы издеваетесь? Может все-таки книжку почитаете, прежде чем такие вопросы задавать?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Хотел как проще)

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если “проще” – это задавать идиотские вопросы вместо чтения учебников – то это закончится для вас позорным вылетом с форума

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Купюроприёмник, поди, подключает. Если это так, то таких же вопросов будет множество.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Давайте все же в песочнице не сильно гнобидь, а то и того малый интерес отобьём.

Ты это читал (на русском и без фанатизма всякого и извращений?) – http://arduino.ru/Reference/AttachInterrupt

Если внимательно прочёл раз 5-7, сходил попить чайку, ещё пару раз, приспичило поссать- поссал, ещё пару раз прочёл и вот уже хочешь писать вопрос – ещё раз прочёл?! Если нет, попробуй. Я на полном серьезе говорю и нисколько не стебу. Сначала ты читаешь как книжку а-ля детектив, потом вдумываться начинаешь, потом ищешь непонятное и так далее. В итоге – когда пишешь вопрос или вопрос сам собой пропадёт (потому что ты захочешь его сформулировать максимально понятно и верно для себя в первую очередь) или напишешь вопрос, но в нем уже будет 90% ответа. Тебя или стебом/шуткой к ответу пнут или чутка затянуто))

Откуда берутся баги и кто в этом виноват? arduino+

Привет содруги! Сегодня я расскажу о повторении наверно самого простого осциллографа. У одного товарища на его ютуб канале я случайно наткнулся на видео, где он повторял это устройство. Так как мне не очень то нужен полноценный дорогостоящий осцил, я решил собрать его примитивное подобие. Автор называет его Пультоскоп и совершенно свободно разместил его исходники за что отдельное спасибо.

Корпус я искал недолго. Прочитав статью, посмотрев видео я решил, что бейте меня по-рукам, но мне нужен этот прибор. Пока ждал экран от Nokia 5110 с Али, я нашел карту памяти для DreamCast. Даже сам не знаю откуда она у меня, ведь приставки у меня никогда не было). Конечно понимал, что будет трудно все уместить в таком крошечном коробке, но попытаться нужно было.

Сборка затянулась на пару вечеров с одновременным просмотром футбола. Затянулась потому, что корпус очень мал, а впихнуть нужно было немного-немало экран, кусок платы с кнопками, arduino pro micro, выключатель и батареи. Свое варварство я начал с разбора и откусывания платы. Кнопки нужно было оставить и пришлось поступать радикально).Потом началась размахивание горячим жалом и “кривыми” руками пайка.Ардуина, мешала плотно закрыть корпус, поэтому пришлось отказаться от нее в пользу Atmega328 распаянной на макетной плате. Прошивка, проверка — все работает. Я думаю самодельщики знают это чувство, когда, что-то сделанное своими руками вдруг работает) Радость и гордость за себя самого переполняют)) Заработало кстати, с первого раза, я даже удивился. Потыкал, померил, все хорошо, но есть наводки от сети, когда берешься за щуп или за само устройство наводка в 50 герц появляется сразу. Нашел старый, советский, экранированный провод взамен китайскому коннектору. Советский провод тридцатилетней давности кстати, лудится и припаивается намного лучше и приятнее новых поднебесных — прогресс мать его. Экран на землю, провод на пин микроконтроллера и все, наводки пропали! Дальше собрал все в корпус без китайских соплей термоклея конечно же не обошлось, но а как по другому созидать? здесь китайцем нужно сказать спасибо)).

Прибор получился нуууу оооооочень компактным! Осциллограф в треть ладони это круто парни! Пусть характеристиками и не блещет, но для минимальных, простых задач достаточно. Рекомендую для повторения, тем более, что бюджет примерно 250-400 рублей учитывая корпус и мелочевку и даже электричество). Оставляйте комментарии. Спасибо за потраченное время! Ссылка на проект автора.

Источники:

http://arduinoplus.ru/otkuda-bagi-kto-vinovat/

http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/funktsii-preryvaniya-chto-eto-otkuda-berutsya

http://pikabu.ru/tag/Arduino,%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D0%B9%20%D1%81%D0%B0%D0%BC?page=20

http://arduinoplus.ru/esp-dannie-na-web-stranicu/

Ссылка на основную публикацию