1

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

为了简单起见,我决定库的用户只需执行以下操作,例如在他的 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 时,它确实可以正常工作
  • 在为不同类型的控制器添加第二个驱动程序后,它仍然可以在不定义任何类型的情况下工作,并且当我定义错误的控制器类型时它也可以工作。

我究竟做错了什么?

4

1 回答 1

1

确保预处理器将区域放在#ifdef LCD_USE_SSD1289后面#define LCD_USE_SSD1289。你说#define LCD_USE_SSD1289main.c档案里。你真的应该使用一个单独的 definitions.h 文件,它#include位于 ssd1289_lld.h 的顶部。希望有帮助。

于 2012-06-11T14:05:35.607 回答