Откуда берутся баги и кто в этом виноват? 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://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