Ответ 1
Как вы отметили, вы проверяете цель платы в среде разработки, чтобы компилятор мог знать плату. К сожалению, IDE не сообщает компилятору эту информацию напрямую. Только тип и частота процессора передаются вниз.
Вы можете увидеть, что делает IDE для компиляции программ. В меню настроек включите подробный вывод для компиляции. Скомпилируйте эскиз, и вы увидите что-то вроде этого:
C:\Apps\arduino-1.0-windows\arduino-1.0\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata -sections -mmcu = atmega328p -DF_CPU = 16000000L -DARDUINO = 100 -IC:\Apps\arduino-1.0-windows\arduino-1.0\hardware\arduino\cores\arduino -IC:\Apps\arduino-1.0-windows\arduino -1.0\hardware\arduino\variants\standard C:\Users\Jim\AppData\Local\Temp\build4664216036291565363.tmp\Blink.cpp -oC:\Users\Jim\AppData\Local\Temp\build4664216036291565363.tmp\Blink. cpp.o
. -D - это то, как окружение Arduino проходит, определяет препроцессор. Вы видите, что таким образом передаются только скорость процессора и версия arduino.
Выводы IO определяются по-разному: IDE включает одну папку, содержащую файл заголовка конкретной платы.
Этот аргумент -I содержит папку на пути поиска компилятора:
-IC:\Apps\arduino-1.0-windows\arduino-1.0\hardware\arduino\variantants\standard
В этой папке находится файл pins_arduino.h, который подходит для выбранной вами платы. Если вы выберете другую плату, вы увидите, что этот параметр изменился.
Если вы хотите изменить конфигурацию IDE, вы можете получить то, что вы просите.
Итак, чтобы получить то, что вы хотите, вам просто нужно получить одну директиву #define. Итак, вот как
Шаг 1. Сделайте свой собственный тип платы. Чтобы создать новый тип платы, см. Файл boards.txt, расположенный в этой папке:
...\Arduino-1,0\HARDWARE\Arduino
Строка, подобная этой, определяет папку include (стандартная в этом случае):
uno.build.variant=standard
Скопируйте весь блок, изменив имя и папку
myuno.name=My Arduino Uno
...
myuno.build.variant=myunoboard
При этом изменении, когда вы выберете эту цель платы, папка myunoboard будет размещена на пути к компилятору.
Шаг 2. Сделайте заголовок, который включает в себя определение.
В папке
...\Arduino-1.0\HARDWARE\Arduino\варианты\myunoboard
создайте файл pins_arduino.h. В этом файле
#include "..\standard\pins_arduino.h"
#define BOARD MY_UNO
// and/or this form
#define __BOARD_MY_UNO
Шаг 3. Повторите попытку для дополнительных плат.
Это обеспечит возможность создания кода для разных целей платы.
Сказав это, я бы не рекомендовал этот подход. Если вы начинаете думать о создании кода, который работает с несколькими целями, возможно, пришло время перейти от IDE Arduino. Если вы использовали среду, такую как Eclipse, у вас есть один проект с любым количеством конфигураций сборки. Каждая конфигурация сборки может определять разные препроцессоры для целевой платы.