Мы обычно имеем дело с этим следующим образом:
--lib
---hardware_interface.h
---etc
--MCU_TYPE
---main.cpp
---hardware_mcu_type.h
---hardware_mcu_type.cpp
--test
---main.cpp
---hardware_mock.h
Как видите, у нас есть общая папка с общим кодом. Весь код в библиотеке использует класс интерфейса hardware_interface.h
(у нас часто есть несколько интерфейсов для I2C, SPI, UART и т. Д., Все они определены в отдельных файлах). Все классы, использующие определенный интерфейс, имеют функцию для установки указателя или ссылки на интерфейс. Это делается в файлах main.cpp.
Теперь эти интерфейсы чисто виртуальные. При создании приложения, таким образом, требуется заполнить их. Это то, где или hardware_mcu_type.h
или hardware_mock.h
входят. В основном для фактического mcu используются фактические аппаратные реализации. При тестировании на ПК используются фиктивные объекты.
Вам нужен как минимум переключатель в файле CMakeLists.txt
, который создает разные файлы для разных сборок.
Примечание : пожалуйста, обратите внимание, что доступ к памяти и ее распределение сложно проверить на другой платформе, поскольку это может отличаться. Модульные тесты лучше всего ориентированы на логику тестирования.