如何在 c (arduino) 中使用 #define 正确硬编码编译器的定义标志 (-D)



将编译器的-D标志硬编码到源文件中的最佳方法是什么?

我想把#define放在一个的头中,然后导入一堆应该对该define做出反应的东西。它是那样工作的吗?我应该放哪个标题?或者直接到main.c?还是对他们所有人?

TMI详细信息:这里的环境是digispark hw-018(带内置usb编程器的attin85(,#define应该取代-DUSE_SOFTWARE_SPI,这样我就可以在SPI模式下使用AVR-can库从MCP2515中读取内容。

编辑:经过一些烦人的撞击,main.c的顶部现在看起来是这样的,但它仍然不起作用。

#define USE_SOFTWARE_SPI 
#include "src/can.h"
#define USE_SOFTWARE_SPI 
#include <avr/io.h>
#define USE_SOFTWARE_SPI 
#include <avr/pgmspace.h>
#define USE_SOFTWARE_SPI 
#include <DigiUSB.h>

我说得对,有什么东西在某个地方凌驾于我的定义之上?如果我在#ifndef(或#ifdef(之前硬编码#define USE_SOFTWARE_SPI,它就会工作

这里有几种方法。

如果它只是一个main.c源文件,那么把它放在文件的顶部就可以了:

// main.c
#define USE_SOFTWARE_SPI // must be first!
#include <spi_stuff.h>
...

如果需要在多个源文件中,这就不能很好地扩展,因为在几个地方中的一个地方很容易错过它。

我想,即使有多个源文件,但只有一个真正引用了需要影响的头文件,风险也较小,但这就是错误发生的原因。

我倾向于将这种东西作为一个整体放在项目定义中,无论是在makefile中,还是在IDE用来驱动项目的任何东西中,因为这确保了每个人都能看到它

因此,如果你确实有多个源文件,并且你不能或不会将其放在项目文件中,那么处理它的方法是使用你自己的自定义标头,该标头仅用于此目的:

// my_spi_stuff.h
#define USE_SOFTWARE_SPI 
#include <spi_stuff.h>
... others if needed

然后将包含在.c程序中。一定要给文件起一个强烈建议";局部调整";而不是可能与图书馆提供的内容相混淆的内容。

EDIT我刚刚重读了这是Arduino,据我所知,IDE没有项目范围的设置。

最新更新