В наших автомобильных ECU мы используем AUTOSAR с его абстракцией MCAL и абстракцией HW более высокого уровня и услугами на основе каналов и RTE с компонентами SW, а также его портами и интерфейсами.
Еще одна функция AUTOSAR - это возможное разделение между конфигурацией PRECOMPILE, LINKTIME и POSTBUILD.
Таким образом, вы можете отделить конфигурацию от стандартной реализации.
Это позволяет также использовать физические каналы (проводные HW) и логические каналы отображаются на физические каналы и поведение логических каналов на основе их ChannelId. Кроме того, Frames / PDU абстрагируются PduIds и его настроенными выносками в каждой конфигурации.
На этапе загрузки / запуска у нас есть определенный механизм обнаружения, который может, например, использовать общую c «неизвестную» конфигурацию, который позволяет обнаруживать после частичного выключения и реконфигурации окончательную инициализацию и настройку запуска, например, переконфигурировать стек связи для левого / правого ЭБУ (включая маршрутизацию в одном или обоих ЭБУ между каналами, поворачивая канал, потому что это не подключен к другому ЭБУ), имея на обоих ЭБУ выход ШИМ, который используется в одном положении для управления зуммером, когда он управляет нагревателем или светодиодом на другом ЭБУ.
AUTOSAR CompilerAbstraction позволяет абстрагировать компилятор Отличий, например __attribute__
против #pragma
или @far
/ @near
, и не загрязнять код такими различными спецификаторами компилятора c, которые обрабатываются #ifdefs et c.
AUTOSAR MemoryMapping позволяет разместить CODE / CONST / CONFIG_DATA (конфигурация BSW) / VA R (данные) на отдельные секции памяти, например, чтобы разделить CODE из CONFIG_DATA на отдельно перепрограммируемые секции fla sh.
Для вашей бизнес-логики c, попробуйте выяснить реализацию библиотек алгоритмов, таких как Debounce, Контроллер P / PI / PID и т. Д. c, где конфигурация и состояние передаются вместе со значением.
Преимущество AUTOSAR заключается в том, что вам не нужно хранить все конфигурируемые части в ценном ОЗУ, например здесь так часто упоминается «передать функцию обратного вызова по указателю», потому что вы должны поддерживать эти обратные вызовы в оперативной памяти.
И вы можете создавать различные конфигурации в AUTOSAR, как правило, с помощью инструмента конфигурирования и генерации.
Да, AUTOSAR также имеет недостатки, которые являются обычными в архитектурах, представляющих абстракции. Это требует немного больше ресурсов.
В вашем примере драйверы и business_logi c будут иметь конфигурации, которые генерируются фактически для каждого приложения отдельно в вашем app1 / app2, l Каналы рукописного ввода и приложения вместе. Конфиги затем загружаются вашими основными. c файлами во время инициализации.
apps/
app1/
app1_layer1/
app1_layer2/
config/ <-- driver/business logic config app1
main.c
app2/
app2_layer1/
app2_layer2/
config/ <-- driver/business logic config app2
main.c