組み込みデバイス用の GLCD ライブラリに取り組んでいます。アイデアは、それを高レベルと低レベルのセクションに分割することです。これにより、「ユーザー」は自分のディスプレイ コントローラの低レベル関数を記述し、これらの関数を書き換えることなく、line-、cricle-、string drawing などの高レベル関数を使用できます。
簡単にするために、ライブラリのユーザーは次のことを行うだけでよいと判断しました。たとえば、SSD1289 コントローラーでディスプレイを使用するには、main.c で次のようにします。
#define LCD_USE_SSD1289
サンプル ファイル ssd1289_lld.h:
#ifdef LCD_USE_SSD1289
lld_lcdInit(void);
#endif
サンプル ファイル ssd1289_lld.c:
lld_lcdInit(void) {
// do some stuff for this controller
}
サンプルファイル s6d1121_lld.h:
#ifdef LCD_USE_S6D1121
lld_lcdInit(void);
#endif
サンプルファイル s6d1121_lld.c:
lld_lcdInit(void) {
// do some stuff for this controller
}
高レベル ファイル内では、次のようにします。
#include "drivers/ssd1289_lld.h"
#include "drivers/s6d1121_lld.h"
void lcdInit(void) {
lld_lcdInit();
}
しかし、これはどういうわけかうまくいきません:
- #define LCD_USE_SSD1289 を実行しない場合、問題なく動作します
- 別のタイプのコントローラー用に 2 番目のドライバーを追加した後も、タイプを定義しなくても機能します。また、間違ったコントローラー タイプを定義した場合にも機能します。
私は何を間違っていますか?