arduino - 确定 Arduino 的板类型

标签 arduino precompiler

如何在编译时确定 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/

相关文章:

单击计数器以使用 C 代码点亮 LED

arduino - NodeMCU (ESP8266) 连接到 MQTT 代理时出现异常 28

c - 实现各种大小的结构的基于数组的内存池

c# - 如何从 Process.Start 获取日志

c# - 找不到蓝牙设备的 ID

javascript - 使用 johnny-five 和 arduino 读取输入引脚

java - 递增数组值 - Arduino

c - 包含的头文件是否在C文件中展开

c - 如何自动化可变输入数组列表

cocoa - 在 Cocoa 和 Cocoa-Touch 应用程序之间共享常量