Как загрузить hex файл в ардуино Arduino hex avr

Как загрузить hex файл в ардуино Arduino hex avr

Сегодня вы узнаете как загрузить hex файл в ардуино. Это первая часть из серии уроков про hex формат. Я расскажу и покажу как сделать hex файл arduino используя arduino ide. Написав исходный код очень просто выполнить прошивку hex файла. Вы узнаете все плюсы и минусы использования HEX файла. Если вы не хотите или вам некогда заниматься программированием, то hex code это для вас. Во второй части я расскажу как прошивать HEX файл в ардуино используя различные внешние программы. Вы узнаете чем открыть hex файл прошивки.

Мне в последнее время всё чаще стали задавать вопросы, как можно проще загружать скетч в Ардуину. Я понимаю, что не все хотят вникать в азы программирования. Многим надо просто быстро сделать проект. У них нет интереса в установки Ардуино IDE, поиск различных библиотек, настройке и установке параметров. Хочется просто подключил Ардуину, нажал кнопку и всё готово. Вот для них я и буду теперь вместе со скетчем выкладывать ещё и HEX файл. Этот файл надо будет просто загрузить в Ардуино и всё. Больше не надо разбираться в коде, искать и устанавливать библиотеки, думать правильно я сделал или нет. Это очень удобно и быстро. Но всё же собирать схему придётся самому. Этого за вас никто не сделает.
Когда вы пишите свой код или как он по-другому называется - Скетч. То на выходе вы получаете исходный код. А когда прошиваете Ардуино, ваш исходный код компилируется в бинарный код, такой код Ардуине проще понять. И обычно он имеет расширение HEX. 

  • Преимущество HEX файла – это простота ее использования:
  • Не нужны никакие библиотеки,
  • Легко загрузить в плату,
  • Можно перенести с одного устройства на другое.

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

Так же HEX файл нужен для работы с внешними программами, например с Протеусом. А ещё в последнее время, в интернете, всё чаще стали попадаться не исходники кода, а уже скомпилированный HEX файл. Для этого есть несколько причин. 
Одна из них, разработчик не хочет делиться исходным кодом и для доработки приходиться с ним связываться, и скорее всего платить деньги. 
Второй причина – это если проект очень сложный и для его настройки требуется много действий, то проще настроить всё самому, а потом выложить HEX файл. Что бы потом в комментариях не возникало много вопросов. От простых, где взять библиотеку, до «А у меня ничего не работает». Загрузив HEX файл вы можете быть уверены, что код рабочий, а если у вас «ничего не работает» , то значит вы что-то не так собрали. И разбираться нужно именно в этом.
Короче, что такое HEX и для чего он нужен мы разобрались. Теперь давайте научимся получать его из своего кода.
Получение HEX файла.
Давайте запустим Ардуино IDE и какой-нибудь из примеров. Все наверняка догадались что это будет пример BLINK. 
Теперь проверим, подключена ли у нас плата Ардуино и к какому порту она подсоединена.
Хотя скажу по секрету, это нам не особо нужно. Получить HEX файл можно вообще не имея Ардуины в наличии. 
Заходим в меню Файл и выбираем пункт Настройки.
Устанавливаем галочку в строке Показать подробный вывод, в чекбоксе Компиляция. И всё.
Теперь можно прошить Ардуину, а можно нажать на кнопку Проверить.
Начнётся компиляция вашего кода. Это можно увидеть по обилию текста снизу экрана.
После окончания нужно найти строчку кода с расширением HEX. Это адрес временной папки где будет сохранён HEX файл. Он там будет находиться до тех пор пока вы не закроете Arduino IDE .
Теперь давайте откроем этот файл и посмотрим как он выглядит. Я буду использовать TOTAL Commander, а вы, тут программу, что вам удобна.
У меня он открылся в NOTEPAD++
Мы видим 60 строчек кода, который совсем не похож на тот что вы написали. Вот с этим кодом и работает Ардуина.
Теперь давайте сравним ваш исходный код и то что получилось после компиляции.
Согласитесь, Небо и Земля.

А теперь давайте перейдём в папку где хранится наш HEX файл.
Переходим по адресу который у нас в командной строке. И видим, что там целая папка с разными файлами. Мы некоторые из них рассмотрим чуть позже. Находим наш HEX файл. Для особо внимательных, там 2 HEX файла. С бутлоадером и без него.

Теперь давайте возьмём другой файл, посложнее. Там и кода побольше и чтобы  была применена библиотека. Кстати эта библиотека не входит в стандартную установку Ардуино IDE. И для работы с этим скетчем, вам бы пришлось самому устанавливать эту библиотеку. Или просто загрузить её и весь скетч через HEX файл.
Делаем всё тоже самое что и раньше.
Нажимаем кнопку Проверить. Ждём окончания компиляции и переходим по адресу HEX файла.
Находим и открываем папку.

Заходим в папку Библиотека и видим там библиотеку Нео пиксель.
В папке скетч находится исходный код нашего скетча. Для сравнения посмотрим код в Arduino IDE.
Переходим к функции loop и сравниваем. Всё одинаковое.
Дальше я буду сравнивать в Visual Studio Code
Помните я говорил, что в папке лежат 2 HEX файла. Вот их и сравним.
Один из них с загрузчиком, а второй без него.
Видим что в начале идут полностью одинаковые строчки кода. Например сравним 50 строчку.
Теперь прокручиваем файл без загрузчика до конца.
Видим, что на 117 строчке код закончился. Теперь прокручиваем файл с загрузчиком. До 117 строки.
А всё что дальше это и есть код загрузчика. Кстати загрузчик занимает столько же места, как и код программы с библиотекой.

Вот мы и научились получать HEX файл из своего исходного кода.
Следующий шаг это загрузка HEX файла в Ардуино.
 

Дополнительные материалы по теме
Как загрузить hex файл в ардуино Arduino hex avr
Загрузка HEX в AVR Ардуино
Arduino bootloader. Arduino загрузчик. Прошивка загрузчика arduino