|
|
最近買了幾塊不同的 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 時自動加上去?
|
|