SOME/IP 协议介绍(五)指南

指南(信息性)

选择传输协议

SOME/IP直接支持互联网上使用最广泛的两种传输协议:用户数据报协议(UDP)和传输控制协议(TCP)。UDP是一种非常简洁的传输协议,仅支持最重要的功能(多路复用和使用校验和进行错误检测),而TCP则添加了额外的功能以实现可靠的通信。TCP不仅可以处理位错误,还可以处理分段、丢失、重复、重排序和网络拥塞等问题,因此TCP是更强大的传输协议。

对于车辆内部使用,需求与互联网上的需求不同。对于许多应用程序,我们需要非常短的超时时间以在非常短的时间内做出反应。使用UDP可以更好地满足这些要求,因为应用程序本身可以处理不太可能的错误事件。例如,在循环数据的使用情况下,最好的方法通常是等待下一次数据传输,而不是尝试修复上一次的传输。UDP的主要缺点是它不处理分段,因此只能传输较小的数据块。

指南:

• 如果需要非常严格的延迟要求(<100毫秒)以及在出现错误时的需求,使用UDP。

• 如果需要传输非常大的数据块(> 1400字节)且在出现错误时没有严格的延迟要求,使用TCP。

• 如果适用于使用情况,尝试使用外部传输(网络文件系统,APIX链接,1722等)。只需传输文件句柄或类似内容。这样可以给设计师更多的自由度(缓存等)。

所使用的传输协议由接口规范在每个消息的基础上进行指定。方法、事件和字段通常只使用单个传输协议。

实现AUTOSAR应用程序中的高级特性

从AUTOSAR 4.0.3开始,将支持SOME / IP。不幸的是,并非所有SOME / IP的功能都可以在AUTOSAR中直接支持(例如,动态长度数组)。在AUTOSAR实现中需要高级功能的罕见情况下,存在一种解决方案:通过将SOME / IP有效负载或其部分通过uint8缓冲区传递来在应用程序内实现高级功能。对于AUTOSAR,这些字段似乎只是动态长度的uint8数组,并且应相应配置。

请注意,在AUTOSAR 4.0.3中,只能有一个单独的uint8数组,并且它必须位于有效负载的末尾。

包含指针的数据结构的序列化

对于包含指针的数据结构(例如内存中的树)的序列化,不能仅仅使用数据类型(例如uint8)来传输指针,而是应该将其转换为传输格式。存在不同的指针序列化方法。我们推荐以下方法。

隐式ID的数据结构数组

当传输一组包含指针的数据结构,且这组数据结构足够小以适应单个RPC消息时:

• 将数据结构(例如树节点)存储在数组中

• 使用数组中的位置作为存储的数据结构的ID

• 将指针替换为指向的数据结构的ID

具有显式ID的数据结构数组

对于较大的数据结构集,必须解决其他问题。由于并非所有数据结构都适合单个消息,因此ID必须在不同消息之间唯一。这可以通过不同的方式实现:

• 在每个消息中添加偏移字段。数组元素的ID将通过将偏移量加到其在数组中的位置来计算。请记住,需要仔细选择偏移量。例如,如果每个消息最多可以包含十个数据结构(0-9),则可以选择0、10、20、30等作为偏移量。

• 通过使用结构体数组存储显式ID。结构体中的第一个字段将是ID(例如uint32),第二个字段将是数据结构本身。出于安全和可靠性原因,指针(即内存地址)永远不应直接用作ID。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194142.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV快速入门:图像形态学操作

文章目录 前言一、图像形态学基础1.1 背景介绍1.2 像素距离1.2.1 什么是像素距离&#xff1f;1.2.2 常见的像素距离度量方法1.2.3 计算像素距离的代码实现 1.3 图像连通性1.3.1 什么是图像连通性&#xff1f;1.3.2 连通类型1.3.3 连通组件标记1.3.4 连通性在图像处理中的应用 1…

算法设计与分析复习--贪心(一)

文章目录 上一篇贪心的性质活动安排问题贪心背包问题最优装载哈夫曼编码下一篇 上一篇 算法设计与分析复习–动态规划 贪心的性质 贪心和动态规划都要求问题具有最优子结构&#xff1b; 可用贪心方法时&#xff0c;动态规划可能不适用 可用动态规划方法时&#xff0c;贪心方法…

中国制库:创新引领,效率突破,塑造行业新标准

制库是一家专注于企业知识应用的在线SAAS平台,主要构成部分包括制度、表单、流程、制问和集合。作为集合了各种管理制度的平台,制库不仅提供了丰富的制度资源,还通过SAAS版实现了知识集成、修订和应用的全流程。目标是打造中国全面的企业制度库,帮助企业快速建立核心管理系统,并…

iTerm2+oh-my-zsh搭建Mac电脑上终端环境

根据苹果网站上介绍&#xff0c;bash是 macOS Mojave 及更早版本中的默认Shell&#xff0c;从 macOS Catalina 开始&#xff0c;zsh(Z shell) 是所有新建用户帐户的默认Shell。 1. 安装Oh my zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzs…

⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL存储过程 1. 介绍2. 使用3. 变量①系统变…

详解ssh远程登录服务

华子目录 简介概念功能 分类文字接口图形接口 文字接口ssh连接服务器浅浅介绍一下加密技术凯撒加密加密分类对称加密非对称加密非对称加密方法&#xff08;也叫公钥加密&#xff09; ssh两大类认证方式&#xff1a;连接加密技术简介密钥解析 ssh工作过程版本协商阶段密钥和算法…

AtCoder Beginner Contest 329 题解A~F

A - Spread 输入字符串&#xff0c;字符之间加上空格输出 B - Next 输出数组当中第二大的数 C - Count xxx 统计每个字符出现过的最长长度&#xff0c;再累加即可 #include<bits/stdc.h> #pragma GCC optimize("Ofast") #define INF 0x3f3f3f3f #define I…

C++多线程编程(3):接收线程处理函数的返回值

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 处理带返回值的函数asyncpackaged_taskpromise 处理带返回值的函数 有三种方法&#xff1a; asyncpackaged_taskpromise async 第一种方法是使用 async 函数。 步骤&#xff1a; 使用 async 创建线程处理函…

C++多线程编程(1):线程的创建方式

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 进行与线程C中如何实现多线程创建线程的多种方式无参函数lambda表达式常成员函数not常成员引用函数智能指针仿函数类的普通成员函数综合测试 进行与线程 多线程是指多个线程并发执行的过程。 进程与线程的关系&…

QTableWidget——表格的合并与拆分

一、整体思路 表格的操作使用QTableView::setSpan可以实现表格的行和列的合并 表格拆分没有对应的处理函数 主要思路&#xff1a;对表格的属性、内容、拆分与合并的参数进行存储&#xff0c;在进行拆分时对表格内容进行重新创建&#xff08;不考虑效率问题&#xff09; 二、效…

C/C++ 语言 ‘ == ‘ 运算符仅适用于算数表达式

示例代码&#xff1a; #include <stdio.h>typedef struct {int a;int b; } TestStruct;int main(void) {TestStruct testA { 0 }, testB { 0 };if (testA testB) {printf("You can do this!\n");}return 0; }

HTTP1.0协议详解

前言主要特点存在的不足与HTTP1.1的区别在Java中应用HTTP1.0协议知识拓展 前言 HTTP是由蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;爵士创造的。他在1989年提出了一个构想&#xff0c;借助多文档之间相互关联形成的超文本&#xff08;HyperText&#xff09;&#x…