SOME/IP 是一种汽车中间件解决方案,可用于控制消息。它从一开始就旨在完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及最高主机或远程信息处理设备。 还确保 SOME/IP 支持信息娱乐域的功能以及车辆中其他域的功能,允许 SOME/IP 用于 MOST 替换场景以及更传统的 CAN 场景。

SOME/IP 支持广泛的中间件功能:

  • Serialization – transforming into and from on-wire representation.
  • Remote Procedure Call (RPC) and Messaging –实现函数和其他消息的远程调用。
  • Service Discovery (SD) – 动态查找和功能并配置其访问。
  • Publish/Subscribe (Pub/Sub) – 动态配置需要哪些数据并将其发送给客户端。
  • Segmentation of UDP messages – 允许通过 UDP 传输大型 SOME/IP 消息而无需分段。

Serialization

SOME/IP 序列化被设计为非常高效; 即它使用最少的 RAM 和 CPU 资源。这是通过使用二进制和非描述性格式来实现的。 基本上所有参数都写在彼此的后面。 消息的格式与消息的内存表示(打包结构)非常相似或在许多情况下完全相同。

SOME/IP 可以序列化以下基本数据类型(数据类型默认以网络字节顺序/大端编码,但也可以以小端编码):

  • boolean: an 8bit field encoding False (0) or True (1). All other values are not allowed to be used.
  • uint8: unsigned integer with 8 bit size.
  • uint16: unsigned integer with 16 bit size.
  • uint32: unsigned integer with 32 bit size.
  • uint64: unsigned integer with 64 bit size.
  • sint8: signed integer with 8 bit size.
  • sint16: signed integer with 16 bit size.
  • sint32: signed integer with 32 bit size.
  • sint64: signed integer with 64 bit size.
  • float32: floating point numbers with 32 bit size.
  • float64: floating point numbers with 64 bit size.

SOME/IP 可以序列化以下复杂数据类型:

  • struct: a parameter that combines a predefined list of parameters. A struct can start with an optional length field counting all bytes of the struct following the length field.
  • string: fixed length or dynamic length character strings transporting ascii, UTF-8, or UTF-16 characters. For dynamic length strings, the string starts with a big-endian encoded length field counting the bytes the string characters use.
  • array: a parameter that contains a repetition of the same parameter type. This can be predefined number or dynamic number of parameters. For arrays with dynamic length a length field is used.
  • enumeration: an uint with the option of naming different values.
  • bitfield: 8, 16, or 32bit parameter, with each bit representing a boolean. Each boolean can have a name as well as a name for the True and False value each.
  • union: a parameter that can carry a parameter of a predefined parameter type, which is determined at the runtime. The serialization uses a length field, type field, and the data of the parameter.

长度和类型字段的大小为 32 位(默认),可配置为 0、8、16 或 32 位。 所有长度和类型字段都以网络字节顺序/大端编码。

Remote Procedure Call (RPC) and Messaging

SOME/IP服务支持以下消息:

Request/Response Methods: 从客户端发送到服务器的请求和从服务器发送回客户端的响应。 此外,SOME/IP 允许将错误响应从服务器发送回客户端,而不是常规响应。 此功能可用于在错误情况下实现不同的有效负载格式。

Fire and Forget Methods: 请求从客户端发送到服务器。

Event: 事件从服务器发送到相关客户端。 哪个客户端需要此事件将通过 SOME/IP-SD 确定。

Field: 一个字段可以有一个选项通知器(循环或更改时发送的事件)、一个可选的设置器(更新字段的请求/响应方法)和一个可选的获取器(读取当前值的请求/响应方法) 领域的。)

Proprietary extension to the SOME/IP serialization

SOME/IP 已经在消息序列化方面支持了很大的灵活性,比如稍后向消息或内部结构添加参数。

在后来的 AUTOSAR 版本中,专有扩展(最初被错误地称为 TLV 扩展)被添加到 SOME/IP 中,以支持更大的灵活性。 基本上参数和/或结构成员可以以数据 ID 和长度指示作为前缀。 虽然这会降低序列化的效率,但它增加了灵活性,例如从消息中删除参数或稍后重新排序参数。 要使用此功能,API 和应用程序也需要支持此功能。

由于有限的灵活性和高开销,这个扩展目前没有被广泛使用。

请记住,并非所有 SOME/IP 实现都支持此扩展,因为它不是原始 SOME/IP 的一部分。

AUTOSAR support

SOME/IP 是唯一已知的旨在集成到 AUTOSAR 4.x 版本中的中间件:

AUTOSAR 4.0 – 对已经存在的 SOME/IP 消息的基本支持。
AUTOSAR 4.1 – 添加了对 SOME/IP-SD 和发布/订阅的支持。
AUTOSAR 4.2 – 添加了转换器以进行序列化以及其他优化。
AUTOSAR 4.3 – 修复了一些转换器错误,增加了对带有 SOME/IP-TP 的大型 UDP 消息的支持以及 SOME/IP-SD 优化。

1.SOMEIP简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. 大型Web前端架构设计:面向抽象编程入门
  2. if you want to reserve a place at the college library
  3. 保存的图数据丢失_自从用了这2个功能,再也没有担心过文档丢失
  4. You must supply a resourceID for a TextView
  5. moxy json介绍_MOXy的对象图– XML和JSON的输入/输出局部模型
  6. JavaFX上手--第1天
  7. Storm任务提交过程及目录树介绍
  8. 使用Python-Flask框架开发Web网站系列课程(一)构建项目
  9. STK与VC++联合编程实战(第二回:STK服务准备初始化)
  10. Python-Data-Science-Toolbox-Part-1
  11. 没有超级英雄?自己做一个java漫威英雄手办商城系统
  12. SAP培训行业权威评测---51sap培训评测网(www.51sap.net)
  13. java排座位程序_java随机排座位
  14. bootable_noemulation.img linux,Syslinux使用
  15. 递推练习之费解的开关
  16. php 时间戳 周几,php如何根据时间戳判断周几
  17. matlab求解振动学问题,振动力学基础与MATLAB应用
  18. F2FS源码分析-1.3 [F2FS 元数据布局部分] Checkpoint结构
  19. Spring5 框架
  20. 陆奇与YC:两个中年人的患难与共

热门文章

  1. Ps--钢笔工具(1)
  2. 北京交通大学和哈尔滨工业大学的计算机专业,计算机学院访问国家示范性软件学院联盟秘书处和北京交通大学软件学院...
  3. gradle下载各版本
  4. html注册表单用户体验,入口的用户体验!注册表单的设计技巧
  5. activiti7入门教程
  6. matlab做信号发生,声卡和Matlab的虚拟信号发生器的工作原理
  7. caffe安装--踩坑
  8. matlab有扰动量仿真动态响应,利用Matlab仿真平台设计双闭环直流调速系统
  9. C语言计算圆周率到小数点后十七位
  10. 部队业务管理信息化系统-基于大数据部队信息化管理系统设计方案