2012-06-11 52 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

确实有帮助。非常感谢你! –

相关问题