在(高级)应用程序中使用来自硬件抽象层的低级数据类型

时间:2017-03-08 23:34:16

标签: c++ c architecture abstraction-layer

我有一个用C外围设备的硬件抽象层,用C语言编写。应用程序代码通过C ++包装器使用外设。现在我有一个低级枚举ll_enum和一个函数,需要一个具有此数据类型的参数。

我对良好架构的理解意味着以下几点:

  • 低级外设驱动程序(C)
    • 不应该知道有更高的级别
    • 具有enum
    • 的定义
  • C ++ Wrapper
    • 显然知道低级别层,并且有一个应用程序
  • 使用C ++ Wrapper的应用程序代码
    • 只知道C ++ Wrapper

我现在的解决方案:

我在C ++ Wrapper中有一个enum,它与低级枚举有相同的条目。枚举被转换为C ++ Wrapper中的低级类型。

// ### C++ Wrapper ###
enum hl_enum {
    foo = 1,
    bar = 2,
}

void Peripheral::hl_function(hl_enum param) {
    ll_function((ll_enum)param);
}

// ### Low level C-file ###
typedef enum {
    foo = 1,
    bar = 2,
} ll_enum;

void ll_function(ll_enum param);

显然这是一个糟糕的解决方案,因为你必须在两个位置更改代码并在错过时遇到麻烦。

有更好的解决方案吗?

0 个答案:

没有答案