Как применить чистую архитектуру к встроенной программе? - PullRequest
0 голосов
/ 15 октября 2019

Проще говоря, мой вопрос заключается в том, как добиться независимости от микросхем в программе, которая работает на встроенной ОС.

Я пишу простую программу на C ++, которая работает на встроенной ОС (встроенная ОС, но онане очень важно в этом вопросе). Встроенная ОС предоставляет API для отправки и получения управляющей информации и данных в двух направлениях. Например, getc() и putc() для получения и отправки символа.

Теперь микрокомпьютер подключен к микросхеме, способной квыполнение некоторых команд (например, выполнение вызовов REST API или определение местоположения устройства с помощью GPS) путем отправки строк, указанных поставщиком микросхемы, с использованием API, упомянутого выше.

Я хочу абстрагировать логику выполнения команд вмикросхема, так что микросхема легко заменяется другими микросхемами с другими спецификациями команд, когда это необходимо.

Так что в идеале я хочу определить абстрактный класс CommandRunner, в котором есть нереализованные методы взаимодействия с чипом. Затем я могу расширить класс, чтобы создать конкретный класс, который содержит все детали для запуска команд на конкретном чипе (как показано ниже).

Проблема, с которой я сталкиваюсь, заключается в том, что мы не знаем, когда сможем получитьрезультат команды и в каком порядке, поскольку есть только один порт для получения результата (out в приведенном ниже примере). Однако мы знаем, какой результат соответствует какой команде из первых нескольких слов результата. Таким образом, в настоящее время я могу выполнять только команды, но не могу получить результаты элегантным способом. Я делаю не так?

class VendorACommandRunner: CommandRunner {
  public:
  VendorACommandRunner(Serial *in, Serial *out) {
    // some initialization
  }
  Location fetchCurrentLocation() {
    in->printf("GETLOC\n"); // vendor specific command
  }
  HTTPResponse httpGet(string url) {
    in->printf("GET " + url);
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...