evgeniy1294 (23.05.2018 15:53, просмотров: 502) ответил fk0 на Когда ПО прибора запускается на обычном ПК. Для этого обычно ПО разделяется на два слоя, как минимум: платформо-независимый (большая часть, условно 90%) и уровнь абстракции (HAL, 10%). Последний отдельно реализуется для МК и для ПК (где
Спасибо за развернутый ответ. Стараюсь работать примерно в таком ключе, разве что прошивку тестирую на ПК не целиком, а отдельными модулями, например так тестировал шаблон медианного фильтра или шаблон кодера/декодера AES-128/192/256 (для загрузчика).
Текущая разрабатываемая система выглядит так:
Есть контроллер, предназначенный для управления антеннами. Он имеет стандартизированное API в виде команд и регистров + web-морду, позволяющую производить настройку и управлять антенной в ручном режиме.
Программную часть можно разделить на три слоя:
1) HAL, имеющий более менее стандарный интерфейс. Нижняя часть HAL основана на драйверах под периферию МК.
2) Универсальные алгоритмы управления, не зависящие от аппаратной составляющей. Например, обработка концевиков, управление движками, опрос датчиков.
3) Платформозависимые алгоритмы, уникальные для разных типов антенн. Без этой обертки не получается.
При написании HAL я активно использовал механизм наследования. Общий алгоритм управления использует интерфейс родительских классов, например motor или sensor.
За счет такого подхода для работе с новым типом антенн достаточно в коде просто поменять тип двигателей и датчиков, например Incremental -> SSI14. Алгоритму управления без разницы.
С учетом того, что аппаратно контроллер является модульным, получается очень универсальное решение. Один контроллер управляет и антенной 3.7м и 0.9м с абсолютно разными двигателями и датчиками. Платформозависимые алгоритмы отличаются друг от друга строчек на 30.
За счет того, что API контроллера почти не зависит от антенны (почти), софт верхнего уровня не видит разницы между антеннами и упрощается.