簡體   English   中英

如何在 c (arduino) 中使用#define 正確硬編碼編譯器的定義標志 (-D)

[英]How to properly hardcode compiler's define flag (-D) with #define in c (arduino)

將編譯器的 -D 標志硬編碼到源文件中的最佳方法是什么?

我想將#define 放在其中一個標題中,然后導入一堆應該對該定義做出反應的東西。 它是這樣工作的嗎? 我應該放哪個header? 還是直接到main.c? 還是對他們所有人?

TMI 詳細信息:這里的環境是 digispark hw-018(帶有內置 usb 編程器的 attiny85),#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 用於驅動項目的任何內容中,因為這樣可以確保每個人都能看到它。

因此,如果您確實有多個源文件並且您不能或不會將其放入項目文件中,那么處理它的方法是使用您自己的自定義 header 僅用於此目的:

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

然后將其包含在您的.c程序中。 確保給文件起一個強烈暗示“局部調整”的名稱,而不是可能與庫提供的名稱混淆的名稱。

編輯我剛剛重新讀到這是 Arduino,據我所知 IDE 沒有項目范圍的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM