我正在为嵌入式设备开发 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 时,它确实可以正常工作
- 在为不同类型的控制器添加第二个驱动程序后,它仍然可以在不定义任何类型的情况下工作,并且当我定义错误的控制器类型时它也可以工作。
我究竟做错了什么?