Arduino:Хакинг/Процесс сборки скетча: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показаны 2 промежуточные версии 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


{{Черновик}}
 


=Процесс сборки скетча<ref>[https://www.arduino.cc/en/Hacking/BuildProcess www.arduino.cc - Arduino Build Process]</ref>=
=Процесс сборки скетча<ref>[https://www.arduino.cc/en/Hacking/BuildProcess www.arduino.cc - Arduino Build Process]</ref>=
Строка 21: Строка 21:
Сначала в верхнюю часть скетча добавляется  
Сначала в верхнюю часть скетча добавляется  


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
#include "Arduino.h"
#include "Arduino.h"
</syntaxhighlight>
</syntaxhighlight>
Строка 27: Строка 27:
, а для версий '''ниже 1.0''' –  
, а для версий '''ниже 1.0''' –  


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
#include "WProgram.h"
#include "WProgram.h"
</syntaxhighlight>
</syntaxhighlight>
Строка 33: Строка 33:
Это заголовочный файл (его можно найти по адресу  
Это заголовочный файл (его можно найти по адресу  


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
«<ARDUINO>/hardware/cores/<CORE>/»
«<ARDUINO>/hardware/cores/<CORE>/»
</syntaxhighlight>
</syntaxhighlight>
Строка 47: Строка 47:
'''IDE Arduino''' поддерживает разные платы с разными чипами (в настоящий момент – только '''AVR'''), скоростями процессора и загрузчиками. Все эти параметры задаются в [https://www.arduino.cc/en/Hacking/Preferences файле «preferences.txt.»]. Доступны следующие настройки:
'''IDE Arduino''' поддерживает разные платы с разными чипами (в настоящий момент – только '''AVR'''), скоростями процессора и загрузчиками. Все эти параметры задаются в [https://www.arduino.cc/en/Hacking/Preferences файле «preferences.txt.»]. Доступны следующие настройки:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
<BOARD>.name: название, которое будет отображаться в меню Инструменты > Плата.
<BOARD>.name: название, которое будет отображаться в меню Инструменты > Плата.
<BOARD>.build.mcu: микроконтроллер на плате (как правило, «atmega8» или «atmega168»).
<BOARD>.build.mcu: микроконтроллер на плате (как правило, «atmega8» или «atmega168»).
Строка 55: Строка 55:


Также в файле '''«preferences.txt»''' есть еще одна полезная настройка:
Также в файле '''«preferences.txt»''' есть еще одна полезная настройка:
<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
build.verbose: будут или нет печататься отладочные сообщения при сборке скетча (например, «false»). Если указать «true», будет печататься полная командная строка для каждой внешней команды, выполняемой при сборке скетча.
build.verbose: будут или нет печататься отладочные сообщения при сборке скетча (например, «false»). Если указать «true», будет печататься полная командная строка для каждой внешней команды, выполняемой при сборке скетча.
</syntaxhighlight>
</syntaxhighlight>
Строка 81: Строка 81:
Процесс загрузки управляется переменными в файлах '''«board.txt»''' и '''«preferences.txt»'''. В файле '''«board.txt»''' для этого можно использовать следующие переменные:
Процесс загрузки управляется переменными в файлах '''«board.txt»''' и '''«preferences.txt»'''. В файле '''«board.txt»''' для этого можно использовать следующие переменные:


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
<BOARD>.upload.protocol: это протокол, который avrdude должен использовать для «общения» с платой (как правило, это «stk500»).
<BOARD>.upload.protocol: это протокол, который avrdude должен использовать для «общения» с платой (как правило, это «stk500»).
<BOARD>.upload.speed: скорость (в бодах), которую avrdude должен использовать при загрузке скетчей (как правило, «19200»).
<BOARD>.upload.speed: скорость (в бодах), которую avrdude должен использовать при загрузке скетчей (как правило, «19200»).
Строка 88: Строка 88:


Переменные в файле '''«preferences.txt»''':
Переменные в файле '''«preferences.txt»''':
<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
upload.verbose: нужно или нет выгружать отладочные сообщения при загрузке скетча на плату (по умолчанию стоит «false»).
upload.verbose: нужно или нет выгружать отладочные сообщения при загрузке скетча на плату (по умолчанию стоит «false»).
</syntaxhighlight>
</syntaxhighlight>
Строка 97: Строка 97:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}


[[Категория:Хакинг]]
[[Категория:Хакинг]]
[[Категория:Хакинг Arduino]]
[[Категория:Хакинг Arduino]]

Текущая версия от 11:29, 8 июля 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Процесс сборки скетча[1]

Примечание: Если вы попали на эту страницу из веб-панели Yun, потому что хотите создать файл формата «*.hex» для загрузки на плату, то кликните на Скетч > Экспорт бинарного файла в IDE Arduino.

Загрузка кода на Arduino проходит в несколько этапов. Во-первых, IDE Arduino делает несколько маленьких трансформаций, чтобы убедиться, что код – это правильный C или C++ (это два распространенных языка программирования). Затем код передается компилятору (avr-gcc), который превращает код, удобный для восприятия человеком, в инструкции для машины (т.е. в файлы данных об объектах). Затем ваш код комбинируется со (линкуется со) стандартными библиотеками Arduino, которые обеспечивают базовые функции вроде digitalWrite() или Serial.print(). В результате получается один файл формата Intel HEX, содержащий специальные байты для записи в программную память чипа на плате Arduino. Затем этот файл загружается на плату: его передача осуществляется по USB или последовательному соединению через загрузчик (который уже имеется на чипе) или внешнего аппаратный программатор.

Скетчи с несколькими файлами

Скетч может состоять из нескольких файлов (вкладок). Чтобы управлять ими, кликните на стрелочку, находящуюся в правой верхней части IDE Arduino. Вкладки могут быть разных типов: без расширения, а также с расширением «*.c», «*.cpp» или «*.h». (если указать другое расширение, точка будет трансформирована в нижнее подчеркивание). При компиляции скетча все вкладки без расширения будут объединены вместе, чтобы создать «главный файл скетча». Вкладки с расширениями «*.c» или «.cpp» компилируются отдельно. Чтобы использовать вкладки с расширением «*.h», их нужно подключить директивой #include (при помощи "двойных кавычек", а не <угловых скобочек>).

Трансформации, происходящие с главным файлом скетча

Перед отправкой скетча компилятору avr-gcc среда разработки IDE Arduino выполняет с главным файлом скетча (т.е. с совокупностью всех вкладок без расширений) несколько трансформаций.

Сначала в верхнюю часть скетча добавляется

#include "Arduino.h"

, а для версий ниже 1.0

#include "WProgram.h"

Это заголовочный файл (его можно найти по адресу

«<ARDUINO>/hardware/cores/<CORE>/»

), содержащий все определения, необходимые для стандартного ядра Arduino.

Далее IDE Arduino ищет в главном файле скетча определения для функций, а затем создает для них объявления (прототипы). Они вставляются после всех комментариев и директив для препроцессора (вроде #include или #define), но перед прочими директивами (включая объявления типов данных). Таким образом, если вы хотите использовать в качестве аргумента функции какой-то специальный тип данных, его нужно объявить в отдельном заголовочном файле. Кроме того, данная версия IDE Arduino не идеальна: она не создает прототипы для функций, в которых значения для аргументов заданы по умолчанию, а также для тех, которые объявляются в пространстве имен или классе.

Наконец, в нижнюю часть скетча добавляется содержимое целевого файла «main.cxx».

Параметры для целевой платы

IDE Arduino поддерживает разные платы с разными чипами (в настоящий момент – только AVR), скоростями процессора и загрузчиками. Все эти параметры задаются в файле «preferences.txt.». Доступны следующие настройки:

<BOARD>.name: название, которое будет отображаться в меню Инструменты > Плата.
<BOARD>.build.mcu: микроконтроллер на плате (как правило, «atmega8» или «atmega168»).
<BOARD>.f_cpu: тактовая частота, на которой работает микроконтроллер (как правило, «16000000L», а ATmega168 работает на внутренней частоте «8000000L»).
<BOARD>.core: с какой подпапкой из папки «hardware/cores/» слинковываются скетчи (как правило, c «arduino»).

Также в файле «preferences.txt» есть еще одна полезная настройка:

build.verbose: будут или нет печататься отладочные сообщения при сборке скетча (например, «false»). Если указать «true», будет печататься полная командная строка для каждой внешней команды, выполняемой при сборке скетча.

Примечание: На Arduino 0004 и позже build.extension не используется – к главному файлу скетча всегда обращаются как к файлу с расширением «*.cpp».

Процесс сборки

Скетчи компилируются при помощи avr-gcc.

Пути для подключения файлов ведут к папке скетча, целевой папке (<ARDUINO>/hardware/core/<CORE>/), папке «include» для AVR (<ARDUINO>/hardware/tools/avr/avr/include/), а также папке библиотек (<ARDUINO>/hardware/libraries/), где содержится заголовочный файл, который подключается к главному файлу скетча.

Когда вы проверяете скетч, он собирается в папке для временных файлов (к примеру, на Mac это «/tmp»). Когда вы загружаете скетч, он собирается в подпапке, находящейся в папке этого скетча (доступ к ней можно получить, нажав в IDE Arduino на Скетч > Показать папку скетча).

Затем файлы «*.c» и «.cpp», относящиеся к собираемому скетчу, компилируются, наделяются расширением «*.o» и загружаются в эту подпапку. То же самое происходит со всеми файлами «*.c» и «.cpp» в скетче, а также со всеми файлами «*.c» и «.cpp» всех библиотек, которые подключены (при помощи #include) к вашему скетчу.

Затем файлы линкуются вместе, образуя статическую библиотеку, а главный файл скетча линкуется с этой библиотекой. В финальный файл формата «*.hex» попадают лишь части библиотеки, необходимые для вашего скетча, что уменьшает размер большинства скетчей.

Итоговый результат компиляции – это файл с расширением «*.hex», который и загружается на плату. Во время проверки файл «*.hex» записывается в «/tmp» (на Mac и Linux) или в «\Documents and Settings\<USER>\Local Settings\Temp» (на Windows). Во время загрузки он записывается в подпапку, находящуюся в папке скетча (доступ к ней можно получить, нажав в IDE Arduino на Скетч > Показать папку скетча).

Процесс загрузки

Скетчи загружаются при помощи avrdude.

Процесс загрузки управляется переменными в файлах «board.txt» и «preferences.txt». В файле «board.txt» для этого можно использовать следующие переменные:

<BOARD>.upload.protocol: это протокол, который avrdude должен использовать для «общения» с платой (как правило, это «stk500»).
<BOARD>.upload.speed: скорость (в бодах), которую avrdude должен использовать при загрузке скетчей (как правило, «19200»).
<BOARD>.upload.maximum_size: максимальный размер для скетча, загружаемого на плату (зависит от чипа и размера загрузчика).

Переменные в файле «preferences.txt»:

upload.verbose: нужно или нет выгружать отладочные сообщения при загрузке скетча на плату (по умолчанию стоит «false»).

См.также

Внешние ссылки