AUTOSAR_EXP_ARAComAPI的7章笔记(1)

☞返回总目录

相关总结:AutoSar AP CM中的序列化总结

7.1 序列化

Serialization(见 [11])是将特定数据结构转换为标准化格式的过程,以便在发送方和接收方之间进行交换。如果要将数据从一个网络节点传输到另一个网络节点,通常会使用这个概念。当将数据放到网络上并读取回来时,必须遵循确切的、商定好的规则,才能在接收方正确解释数据。对于网络通信用例来说,需要一种定义好的方法将进程内的数据表示转换为网络格式并再转换回来,这一点非常明显:进行通信的模块可能基于具有不同字节序和不同数据字大小(16 位、32 位、64 位)的不同微控制器,因此采用完全不同的对齐方式。

在 AUTOSAR CP 中,Serialization 在节点内部通信中不起作用,内部内存数据表示可以直接从发送方复制到接收方。这是因为在典型的 CP 产品中做了三个假设:

  • 所有本地软件组件(SWC)的字节序相同。
  • 所有本地 SWC 中某些数据结构的对齐方式是一致的。
  • 交换的数据结构在内存中是连续的。

第一点可能有点特殊,因为通常情况下,“内部” 通信一般意味着在单核或多核微控制器甚至多处理器系统上进行通信,在这些系统中,字节序在任何地方都是相同的。只有当我们考虑由不同微控制器系列的 CPU 组成的系统时,这个假设才可能无效,但那时你已经在讨论这种通信在典型意义上是否仍然是 “内部” 通信了。

对于 CP,第二个假设是有效的,因为在这里,整个单地址空间系统的静态映像由源文件或目标文件构建而成,这就要求映像的不同部分之间的编译器设置无论如何都要在某种程度上保持一致。

第三个假设在 CP 中也得到了保证。不允许在软件组件(SWC)间通信中使用的非连续数据类型进行建模。

对于 AP,情况确实不同。在这里,在运行时加载可执行文件(这些可执行文件在不同时间独立构建的,在不同时间上传到 AP ECU)绝对是一个受支持的用例。然而,不同的 ara::com 应用程序的编译器设置在对齐决策方面不同的可能性很高。因此,AP 产品(更具体地,是其 IPC 绑定实现)必须支持交换的事件 / 字段 / 方法数据的序列化。AP 内部 IPC 的序列化如何完成(即转换为哪种通用格式)完全由 AP 供应商决定。关于第三点,AP 的限制较少。例如,AP 支持交换 std::map 数据类型或可变长度成员的类似记录的数据类型。这些数据类型在内存中通常不是连续的(取决于分配策略)。因此,即使地图或记录中的数据在布局上与接收方兼容,在传输过程中也必须进行深拷贝(意味着从不同的内存区域收集包含的元素及其引用 —— 见 [12])。当然,产品供应商可以应用优化策略来消除通信路径中的序列化和反序列化阶段:

  • 关于对齐问题,最简单的方法可能是允许系统的集成商进行配置,使得对于某些通信关系,对齐可以被认为是兼容的(因为他拥有关于所涉及组件的必要知识)。
  • 中间件技术中常见的另一种方法是在首次进行 ara::com 通信调用之前,通过交换一种检查模式作为一种初始化序列来验证双方的对齐设置是否相等。
  • 可以通过提供关心连续性的向量实现来避免由于非连续内存分配而需要深拷贝的问题。

7.1.1 零拷贝影响

在 IPC / 中间件实现中,通常性能优化的首要任务之一是避免在数据的发送方和接收方之间进行不必要的复制。因此,“零拷贝” 这个流行语被广泛用来描述这种模式。当我们谈论 AP 时,我们有对单独进程中运行的应用程序提供内存保护这样的架构期望,典型的通信方法需要从源地址空间到目标地址空间进行至少一次的数据复制。高度优化的 IPC / 中间件实现甚至可以通过在通信的 ara::com 组件之间设置共享内存区域来消除这一单一复制步骤。如果你看 5.19,你会看到,我们在 API 设计中直接鼓励这种实现方法。但是,如果产品供应商不解决序列化问题,他无法从共享内存方法中受益:如果在通信伙伴之间必须进行转换(也就是序列化 / 反序列化),那么无论如何都必须进行复制 —— 所以旨在实现 “零拷贝” 的复杂共享内存方法就实现不出。

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

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

相关文章

低空经济之星eVTOL研发技术详解

低空经济之星eVTOL(Electric Vertical Take-off and Landing)是一种采用储能电池、电机驱动以及螺旋桨推进方式,并具备垂直起降功能的新型航空器。以下是对eVTOL研发技术的详解: 一、技术特点 1. 分布式推进系统 结构简单性与轻…

算法每日双题精讲——双指针(快乐数,盛最多水的容器)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…

【c++ gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试

【c gtest】使用谷歌提供的gtest和抖音豆包提供的AI大模型来对代码中的函数进行测试 下载谷歌提供的c测试库在VsCode中安装抖音AI大模型找到c项目文件夹,使用VsCode和VS进行双开生成gtest代码进行c单例测试 下载谷歌提供的c测试库 在谷歌浏览器搜索github gtest, 第…

数据库SQLite的使用

SQLite是一个C语言库,实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。SQLite文件格式稳定、跨平台且向后兼容。SQLite源代码属于公共领域(public-domain),任何人都可以免费将其用于任何目的。源码地址:https://github.com/…

【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 官方信息 会议官网:www.icbar.net 2024 4th International Conference on Big Data, Art…

图像算法之 OCR 识别算法:原理与应用场景

一、引言 在当今数字化时代,图像信息的处理和识别变得越来越重要。光学字符识别(Optical Character Recognition,OCR)算法作为一种能够将图像中的文字转换为可编辑文本的技术,正广泛应用于各个领域。从文档数字化到自…

SQLite的BLOB数据类型与C++二进制存储学习记录

一、BLOB数据类型简介 Blob(Binary Large Object)是一种用于存储二进制数据的数据类型,在数据库中常用于存储图片、音频和视频等大型(大数据量)的二进制数据[1-2]。需要注意的是,SQLite中BLOB类型的单对象最…

python基础——05函数

一、函数 1.1 函数定义 函数定义:实现特定功能的代码块 函数的作用: 简化代码提高代码重用性便于维护和修改可提高代码的可拓展性 函数三要素:功能、参数、返回值 函数定义的语法格式: 函数分类: 从定义的角度—…

[Redis] Redis哨兵机制

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

【Eclipse系列】eclipse安装与常规配置(含插件)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、下载与安装 二、常规设置 1.1.设置工作空间(workspace) 1.2.设置字体和字体大小 ​编辑 1.3.设置编码 1.4.去除验证(validation) 1.5.去除单词验证(spelli…

注册登录学生管理系统小项目

头文件 #ifndef _LOGINLINK_H_ #define _LOGINLINK_H_ #include<myhead.h> typedef struct {int id;char name[20];int age; }stu,*Pstu; typedef struct node {union{int len;stu data;};struct node *next; }node,*Pnode; int regist(); int login(); Pnode create()…

【在clion中构建python interpreter环境用于debug fastlio2】

在CLION中构建python interpreter环境 数据包在clion中构建python interpreter环境 数据包 数据包链接&#xff1a;fastlio2_ros2 在clion中构建python interpreter环境 通过clion中的remote development 通过SSH远程构建fastlio2 workspace 打开远程clion工作空间后&#x…

HTML+CSS基础【快速上手】

目录 一、HTML展示 1、HTML基础结构 2、认识元素属性 &#xff08;1&#xff09;元素属性理解 &#xff08;2&#xff09;实例 3、自结束标签和注释 &#xff08;1&#xff09;自结束标签 &#xff08;2&#xff09;注释 4、语义化标签 &#xff08;1&#xff09;语义…

6000字加图文 | 抓包带你深入了解网关到底起什么样的作用?不同网段通信的过程详解

不同网段通信的过程 不同网段就分两种了&#xff0c;同一个局域网下面&#xff0c;不同网段之间的通信&#xff0c;或者是从局域网去往互联网的通信&#xff0c;那么这个过程又是怎么样的呢&#xff1f; 还记得第二篇这个内容吗&#xff0c;访问者把数据交给网关&#xff0c;当…

Gpt4.0最新保姆级教程开通升级

如何使用 WildCard 服务注册 Claude3 随着 Claude3 的震撼发布&#xff0c;最强 AI 模型的桂冠已不再由 GPT-4 独揽。Claude3 推出了三个备受瞩目的模型&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 以及 Claude 3 Opus&#xff0c;每个模型都展现了卓越的性能与特色。其中&a…

Python毕业设计选题:基于django+vue的网上购物系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 商品类型管理 商品信息管理 系统管理 订单管理…

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…

关于Flutter空安全升级方案整理

前言 Flutter 从 2.0 版本开始支持空安全&#xff08;Null Safety&#xff09;。dart 版本为&#xff1a; environment:sdk: ">2.12.0 < 3.0.0"升级到空安全后&#xff0c;由于语法的变动&#xff0c;基本上整个工程&#xff0c;代码都爆红&#xff0c;这对项…

免费送源码:Java+ssm+MySQL ssm家电售后服务 计算机毕业设计原创定制

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对家电售后服务等问题&#xff0c;对家电售后…

共享汽车管理新纪元:SpringBoot框架应用

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…