Использование низкоуровневого типа данных из уровня аппаратной абстракции в приложении (высокий уровень)

У меня есть уровень аппаратной абстракции для периферийного устройства MCU, который написан на C. Код приложения использует периферийное устройство через оболочку C ++. Теперь у меня низкий уровень enum ll_enum и функция, которая требует параметр с этим типом данных.

Мое понимание хорошей архитектуры подразумевало бы следующее:

  • Низкоуровневый периферийный драйвер (C)
    • не должен знать, что есть более высокий уровень
    • имеет определение перечисления
  • C ++ Wrapper
    • очевидно, знает слой низкого уровня и что есть приложение
  • Код приложения, который использует оболочку C ++
    • Просто знает C ++ Wrapper

Мое решение прямо сейчас:

У меня есть перечисление в C ++ Wrapper, которое имеет те же записи, что и перечисление низкого уровня. Перечисление приводится к низкоуровневому типу в 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);

Очевидно, что это плохое решение, потому что вы должны изменить код на двух позициях и попасть в неприятности, если пропустили это.

Есть ли лучшее решение?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector