Список препроцессора 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.