2012-06-11 54 views
1

我正在研究嵌入式設備的GLCD庫。這個想法是將它分成高級和低級部分。這允許「用戶」只爲他的顯示控制器編寫低級函數,並且使用高級函數,如行,cricle,字符串繪製等,而不用重寫這些函數。使用#ifdef自定義驅動程序

爲了讓事情變得簡單,我決定,圖書館的用戶只是必須做到以下幾點,例如使用與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 
} 

實施例文件■ 6d1121_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它做es工作沒有任何問題
  • 爲不同類型的控制器添加第二個驅動程序後,它仍然工作,沒有定義任何類型,它也適用於我定義錯誤的控制器類型。

我在做什麼錯?

回答

1

確保預處理器將#ifdef LCD_USE_SSD1289放在#define LCD_USE_SSD1289區域之後。您說#define LCD_USE_SSD1289位於main.c文件中。您應該在ssd1289_lld.h的頂部使用一個單獨的definitions.h文件,該文件的格式爲#include d。希望有所幫助。

+0

確實有幫助。非常感謝你! –

相關問題