ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1181693
Argon (01.03.2022 09:23, просмотров: 7881)
"Все вот это вот", включая двухнедельный карантин, выбило из колеи, притормаживаю. Не могу сообразить по архитектуре софта, а вопрос, видимо к C++-никам. 

В агрегате есть ~надцать модулей и один хаб, собирающий с них данные через шину CAN.

Софт модулей написан на C, внутренняя структура даннных изображена в виде структур и объединений. Все довольно логично и прозрачно - сообщение через CAN прилетает и сразу ложится на свое место в модуле за счет прозрачной адресации, реализованной в расширенном CAN ID. Никакой специальной сериализации/десериализации.
Модули разработаны на 8-битных МК, посему с байтовой упаковкой структур никаких сюрпризов не оказалось. Общий объем данных модуля - от 100 байт до 2кБ, но на неопределенное будущее предусмотрено и гораздо больше.


Хаб, собирающий данные с модулей, основан на 32-битном МК, соответственно софт может быть написан на C++.
Я могу изобразить все примерно также, в виде C-образных структур и объединений, поплясав с однобайтовой упаковкой, чтобы данные из CAN сразу ложились в нужные места.
А можно изобразить в виде классов, соответствующих модулям. Это выглядит более технологично и, возможно, основной текст софта будет более читабельным. Но заполнение данных будет в виде десериализации, почленно. Кажется, что это ведет к тому, что при изменении структуры данных модуля придется корректировать софт хаба с бОльшими телодвижениями. А также десериализация явно тормознее, чем просто укладка прилетевших данных на свои места.

Т.е. нахожусь в неопределенности - какие преимущества может дать C++-ный подход?