Список препроцессора Arduino #defines


9

Когда выбирается плата в Arduino IDE, определение препроцессора добавляется в один из закулисных файлов.

После долгих поисков и удачи я обнаружил, что формат этого определения:

#define ARDUINO_<PROCESSOR-DESCRIPTOR>_<BOARDNAME>

Некоторые из них легко угадать ( ARDUINO_AVR_UNOнапример), но другие не так. Pro Micro имеет «16» или «8», добавленных к определению в зависимости от скорости. Я не знаю, если определение отличается для 5 В или 3,3 В. Мне не удалось угадать определение для Mega2560, но в этом нет ничего очевидного.

Вопрос 1 : существует ли список возможных определений?

Вопрос 2 : Есть ли какое-либо различие в отношении компиляции и участия препроцессора между BoardX -5V и BoardX -3.3V, и как определяется это различие?


Для чего тебе это? Вероятно, было бы более полезно различать процессоры (например, ATMega328), а не платы.
— Гербен

1
У меня есть многоузловой проект, который использует Uno, Leonardo и <коллективное существительное> Pro Minis. Код почти идентичен для трех версий, но для облегчения отладки я хочу иметь возможность загружать (или, по крайней мере, компилировать из) один и тот же код для всего.
— Чарли Хансон

Включите File> Preferences> Compile Verbose. Затем создайте / проверьте и проверьте вывод. Вы увидите -D определения, которые передаются компилятору. Это позволяет легко определить разницу между вашими досками.
— Visual Micro

Ответы:


10

Список символов доски может быть сгенерирован этой командой оболочки:

$ grep board= boards.txt | cut -f2 -d= | sort -u
AVR_ADK
AVR_BT
AVR_DUEMILANOVE
AVR_ESPLORA
AVR_ETHERNET
AVR_FIO
AVR_GEMMA
AVR_LEONARDO
AVR_LILYPAD
AVR_LILYPAD_USB
AVR_MEGA
AVR_MEGA2560
AVR_MICRO
AVR_MINI
AVR_NANO
AVR_NG
AVR_PRO
AVR_ROBOT_CONTROL
AVR_ROBOT_MOTOR
AVR_UNO
AVR_YUN

Доски определяются свойством build.board в файлеboards.txt .

mini.build.board=AVR_MINI

Это свойство используется рецептом сборки вместе с префиксом ARDUINO_.

-DARDUINO_{build.board} 

Ура!


+1, спасибо за этот список. Жаль, что он не выплескивает двухскоростные версии, чтобы устранить любые сомнения, но это отвечает на вопрос более чем достаточно.
— Чарли Хансон

Свойство платы одинаково для обеих версий pro-mini, но не для мега. Возможно, необходимо обновить board.txt, добавив отличительные названия для мини-вариантов, например, AVR_MINI_16MHZ, AVR_MINI_8MHZ.
— Микаэль Патель

Для тех, кто ищет - я пытался найти определение для NodeMCU ESP8266 - поэтому, основываясь на информации в этом ответе, это ARDUINO_ESP8266_NODEMCU Спасибо!
— Фил

3

У Микаэля правильный ответ, но в зависимости от установленных плат с менеджером досок существует несколько файлов Board.txt, которые изменяют команду на:

grep board= `find . -name boards.txt` | cut -f2 -d= | sort -u

и запуск его из вашей базовой директории Arduino собирает весь набор.


2

Первый бланк - это платформа . Это «AVR» ​​для AVR, «SAM» для Arduinos на основе SAM и т. Д. Это происходит от каталога платформы, содержащей ядро.

Второй бланк - это доска . Это происходит от записи в boards.txtсамом ядре и является идентификатором перед первым периодом.

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

Таким образом, нет окончательного списка, так как список имеет произвольный размер из-за его источника.


Это верно только в том случае, если board.txt не определяет build.boardзначение, и оно автоматически генерируется IDE Arduino.
— per1234

1

Добавление деталей к ответу Билла, добавление к ответу Микаэля:

Пакеты, которые вы загружаете через Board Board, находятся в (начиная с 1.8.9 и многих предыдущих версий):

linux: / home / (ваш логин) /. arduino15

Вы также можете запустить однострочный скрипт Билла в папке установки Arduino, чтобы получить «встроенные» платы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.