mpf*_*aga 11 arduino precompiler
如何在编译时确定Arduino的板类型(例如Uno vs Nano)?不要与确定处理器类型相混淆.正如我看到的例子#if defined(__ AVR_ATmega32U4__)......
类似地,我想要一种方法来确定Arduino的各种风格都使用相同的ATmega328处理器.
IDE知道董事会.因此可以从一些预编译器#IF访问它
与Uno相比,Nano有不同的中断.因此,在编译时了解板类型可以自动化公共库的引脚分配.
正如您所指出的,您在开发环境中检查了板目标,以便编译器可能知道该板。不幸的是,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 环境将定义传递给预处理器的方式。你看到这样只传递了CPU速度和arduino版本。
IO 引脚以不同的方式定义:IDE 包含一个文件夹,其中包含板特定的头文件。
此 -I 参数包含编译器搜索路径上的文件夹:
-IC:\Apps\arduino-1.0-windows\arduino-1.0\hardware\arduino\variants\standard
该文件夹中有一个适合您选择的板的pins_arduino.h 文件。如果您选择不同的板,您将看到此参数发生变化。
如果你愿意修改你的IDE配置,你就能得到你想要的。
因此,要获得您想要的内容,您只需要获得一个 #define 指令即可。所以这里是如何
步骤 1. 制作您自己的板类型。要创建新的板类型,请参阅此文件夹中的boards.txt 文件:
...\arduino-1.0\硬件\arduino
像这样的行定义了包含文件夹(在本例中为标准):
uno.build.variant=standard
Run Code Online (Sandbox Code Playgroud)
复制整个块,更改名称和文件夹
myuno.name=My Arduino Uno
...
myuno.build.variant=myunoboard
Run Code Online (Sandbox Code Playgroud)
通过此更改,当您选择此板目标时,myunoboard 文件夹将放置在编译器路径上。
步骤 2. 创建包含您的定义的标头。
在文件夹中
...\arduino-1.0\hardware\arduino\variants\myunoboard
制作一个文件pins_arduino.h。在该文件中
#include "..\standard\pins_arduino.h"
#define BOARD MY_UNO
// and/or this form
#define __BOARD_MY_UNO
Run Code Online (Sandbox Code Playgroud)
步骤 3. 对更多板重复此操作。
这将提供为不同的板目标构建代码的能力。
话虽如此,我真的不会推荐这种方法。如果您开始考虑创建跨多个目标运行的代码,那么可能是时候放弃 Arduino IDE 了。如果您使用的是 Eclipse 等环境,那么您将拥有一个具有任意数量的构建配置的项目。每个构建配置都可以为板目标指定不同的预处理器定义。