1

組み込みデバイス用の 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 番目のドライバーを追加した後も、タイプを定義しなくても機能します。また、間違ったコントローラー タイプを定義した場合にも機能します。

私は何を間違っていますか?

4

1 に答える 1

1

#ifdef LCD_USE_SSD1289プリプロセッサが領域の後に置くことを確認してください#define LCD_USE_SSD1289。あなた#define LCD_USE_SSD1289main.cファイルにあると言いました。#includessd1289_lld.h の先頭にある個別の definitions.h ファイルを実際に使用する必要があります。それが役立つことを願っています。

于 2012-06-11T14:05:35.607 に答える