Проще говоря, мой вопрос заключается в том, как добиться независимости от микросхем в программе, которая работает на встроенной ОС.
Я пишу простую программу на 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);
}
...
}