如何在编译时确定 Arduino 的板类型(例如 Uno vs Nano)?
不要与确定处理器类型混淆。正如我所看到的那样,例如#如果定义(__AVR_ATmega32U4__)...
同样,我想要一种方法来确定所有使用相同 ATmega328 处理器的 Arduino 口味。
IDE 知道板。那么是否可以从一些预编译器#IF 访问它
Nano 与 Uno 有不同的中断。因此,在编译时知道板子类型可以自动分配公共(public)库的引脚。
最佳答案
正如您所指出的,您在开发环境中检查了一个板目标,以便编译器可能知道该板。不幸的是,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. 制作您自己的板型。要创建新的板类型,请参见位于此文件夹中的 board.txt 文件:
...\arduino-1.0\硬件\arduino
像这样的行定义了包含文件夹(在这种情况下是标准的):
uno.build.variant=standard
复制整个 block ,更改名称和文件夹
myuno.name=My Arduino Uno
...
myuno.build.variant=myunoboard
通过此更改,当您选择此板目标时,myunoboard 文件夹将放置在编译器路径上。
第 2 步。让您的标题包含您的定义。
在文件夹中
...\arduino-1.0\hardware\arduino\variants\myunoboard
制作文件 pin_arduino.h .在那个文件中
#include "..\standard\pins_arduino.h"
#define BOARD MY_UNO
// and/or this form
#define __BOARD_MY_UNO
步骤 3. 重复更多板。
这将提供为不同的板目标构建代码的能力。
话虽如此,我不会真正推荐这种方法。如果您开始考虑创建跨多个目标运行的代码,那么可能是时候从 Arduino IDE 继续前进了。如果您使用的是 Eclipse 之类的环境,那么您将拥有一个项目,其中包含任意数量的构建配置。每个构建配置都可以为板目标指定不同的预处理器定义。
关于arduino - 确定 Arduino 的板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13853109/