【发布时间】:2015-06-06 13:18:14
【问题描述】:
假设我有两个设备驱动程序,我希望它们共享同一个接口,这样调用者就不会知道它正在与哪个驱动程序准确通信。我将如何在 C 中组织它?我想了几个办法:
首先:为两个具有相同接口的驱动创建一对.c/.h文件,并在调用者中创建一个开关:
//main.c:
#ifdef USING_DRIVER_1
#include "driver_1.h"
#else
#include "driver_2.h"
#endif // USING_DRIVER_1
第二:使用单个标头并在驱动程序的源文件中创建一个文件长开关,如下所示:
//driver_1.c:
#ifdef USING_DRIVER_1
#include "driver.h"
bool func(uint32_t var)
{
foo(var);
}
#endif // USING_DRIVER_1
//driver_2.c:
#ifndef USING_DRIVER_1
#include "driver.h"
bool func(uint32_t var)
{
bar(var);
}
#endif // !USING_DRIVER_1
第三个:这个很像第二个,但不是在文件本身中使用 switch 语句,而是在 makefile 或 IDE 等效项中选择特定的驱动程序:
#makefile:
SRC = main.c
#SRC += driver_1.c
SRC += driver_2.c
我确信其中之一优于其他人,并且可能有一些我没有想到。在实践中是如何做到的?
编辑:
关于我的特定系统的详细信息:我的目标是 ARM 微控制器和我的开发人员。环境是一个IDE。设备驱动程序用于两个不同的版本,并且永远不会同时使用,因此每个版本应该只包含一个版本。设备本身就是通过 AT 命令运行的调制解调器。
【问题讨论】:
-
@Olaf 我已在 OP 中添加了有关我的系统的详细信息。
-
关于您的编辑 - 第三种方法是要走的路。 IDE 可能提供了一个简单的切换选项,例如单选按钮。
标签: c driver organization