极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12543|回复: 0

Arduino 可以在 IDE 中定義一些變數嗎?

[复制链接]
发表于 2014-4-1 01:44:11 | 显示全部楼层 |阅读模式
最近買了幾塊不同的 OLED, 每片有自己的庫, 同一個程式, 不能完全合用.
決定自己重寫一個, 暫時已兼容 SSD1306 及 SH1106 的 OLED, 但有一個小問題.

由於 SH1106 跟 SSD1306 有小部份指令不能互通, 所以我在庫中加入 _SSD1306_ 的檢測.

例如:

#ifdef _SSD1306_
  ...發出 SSD1306 的指令
#else
  ...發出 SH1106 的指令
#endif

但就出了問題, 當我要選顯示板時, 就要修改庫的設定.  
考慮過改用變數, 但會令程式中附上一些不必要的部份.  

如上例中, 如果改成用 boolean 變數 _SSD1306_ 去決定:

if (_SSD1306_) {
  ...發出 SSD1306 的指令
} else {
  ...發出 SH1106 的指令
}

那麼, SSD1306 及 SH1106 的指令都會加入執行的程式中, 有點浪費.  因為實際執行時, 只會用其中一套.
當然, 如造樣設定, 就可以 runtime 轉 OLED 也不用再 upload.  但 memory 的資源可能更重要.

如果用 #define _SSD1306_ 的方法, 好像只能在庫中設定.
如果我在自己的程式中加入:

#define _SSD1306_
#include "OLED12864.h"
...

在 OLED12864.h 中檢測不出 _SSD1306_, 就會包括了 #else 的部份.

在電腦的 compiler 有些可以在 compile 的時候加上一些設定去 define 一些值.
例如 當我想用在 1306 時, 程式不用改動, 只需要在 compile 的設定中加入類似  -d_SSD1306_ 之類的設定 就可以了.

Arduino 的庫是 upload 時跟程式一同轉碼的, 應該可以做到類似的東西.

請問 Arduino 是否有同樣的設定, 可以不用改程式/庫, 而在 IDE (或其他設定檔) 中預先定義一些值, compile 時自動加上去?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 16:28 , Processed in 0.064958 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表