gpt4 book ai didi

c - 对自定义驱动程序使用#ifdef

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:38 24 4
gpt4 key购买 nike

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

为了简单起见,我决定库的用户只需执行以下操作,例如在他的 main.c 中使用带有 SSD1289 Controller 的显示器:

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

我做错了什么?

最佳答案

确保预处理器将 #ifdef LCD_USE_SSD1289 放在 #define LCD_USE_SSD1289 区域之后。您说 #define LCD_USE_SSD1289main.c 文件中。你真的应该使用一个单独的 definitions.h 文件,它是 ssd1289_lld.h 顶部的 #included。希望对您有所帮助。

关于c - 对自定义驱动程序使用#ifdef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10981626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com