基本 SOME/IP 转换旨在提供一种可更新的解决方案,用于与 AUTOSAR 服务集成。代理的主要挑战在于转换在编译时未知的消息和 RPC 调用。为了解决这个问题,运行时更新假设 SDV 服务会动态添加或更新,类似于引入新单元类型的方式。
此动态翻译解决方案基于运行时类型信息 (RTTI)。代理会使用所有已安装服务软件包中的配置,并使用该配置中的数据架构执行基于反射的翻译。
虽然基于 RTTI 的转换提供了灵活性,但它本质上比预编译的方法慢。为了优化重载的数据路径,请使用绕过转换的技术。
为了支持使用大量频繁的消息,SDV 允许您绕过翻译并将 SOME/IP 格式的字节转发到消费者服务软件包。
服务软件包处理 SOME/IP 格式的载荷,该载荷可以被使用,也可以转换为 protobuf。
在 SOME/IP 映射文件中为事件指定 message_translation_mode: INTERPRET_AS_BYTES 可绕过翻译。请参阅 samples/some_ip/catalog/integration_test/byte_forward_someip.vsidl 中的示例。
翻译方法权衡
选择翻译方法时,请考虑以下权衡因素:
系统交互:如果不了解原始格式的详细信息,其他 SDV 服务就无法解读以 SOME/IP 格式转发的字节。例如,SDV 遥测无法处理此类消息的各个字段。
额外工作:以 SOME/IP 格式转换原始载荷需要服务包开发者付出额外的工作。
库生成器
SDV 提供了一个用于转换 SOME/IP 格式的自动化生成器。此生成器基于可用的消息定义和映射创建库,以实现直接转换,而无需反射。使用转发的 SOME/IP 字节的服务软件包可以使用生成的库。
建议:仅当 OEM 确定了无法在项目性能要求范围内转换的性能关键事件时,才使用生成器。在这种情况下,您的 OEM 应该已经拥有用于基于 RTTI 的翻译的 protobuf 定义和 SOME/IP 映射。此配置可作为生成器的输入。如需了解详情,请参阅 core_services/tools/someip_translation_generator/ 目录中的 README.md 文件。