将#ifdef用于自定义驱动程序

时间:2012-06-11 14:01:37

标签: c c-preprocessor

我正在为嵌入式设备开发GLCD库。这个想法是将它分成高级和低级部分。这允许“用户”只为其显示控制器编写低级函数,并使用高级函数,如线条,cricle,字符串绘图等,而无需重写这些函数。

为了方便起见,我决定库的用户必须执行以下操作,例如在他的main.c中使用带有SSD1289控制器的显示器:

#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时,它确实可以正常工作
  • 为不同类型的控制器添加第二个驱动程序后,它仍然可以在不定义任何类型的情况下工作,并且在我定义错误的控制器类型时它也可以工作。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

确保预处理器将#ifdef LCD_USE_SSD1289放在#define LCD_USE_SSD1289区域之后。您说#define LCD_USE_SSD1289位于main.c文件中。您应该在ssd1289_lld.h的顶部使用单独的definitions.h文件#include d。希望有所帮助。