AUTOSAR_EXP_ARAComAPI的7章笔记(6)

☞返回总目录

相关总结:ara::com 与 AUTOSAR 元模型的关系总结

7.4 ara::com 与 AUTOSAR 元模型的关系

在本文档中,我们一直在不涉及具体的AP元模型(其清单部分)的情况下解释 ara::com API的思想和机制,AP元模型是正式描述服务接口签名(以及部分行为)的基础,而从这个签名中生成了像代理类骨架类这样的ara::com API 工件以及通信中使用的数据类型。在 5.1 中,我们甚至引入了一个过于简化的IDL,只是为了让读者免受真实元模型/IDL 的复杂性的影响。

本章绝不是对 AUTOSAR元模型的全面解释,AUTOSAR元模型在其自己的文档中有完整的描述,但它将阐明 ara::com 与 [2:AUTOSAR_TPS_ManifestSpecification] 中描述的元模型部分之间的关系。所以请记住,以下部分仍然是比较高层次的,并试图对这种关系提供一个基本的理解。

7.4.1 与 AUTOSAR_TR_AdaptiveMethodology 的关联

建模元素概述以及它们如何相互关联:服务接口部署、实际生成取决于提供的部署信息(例如,稍后将生成的服务接口元素以及与服务实例清单的连接)。

AUTOSAR 自适应平台方法学解释了构建自适应 AUTOSAR系统所需的过程方面以及它们如何相互关联 [TR_AMETH_00100]。它定义了交付或使用的活动工作产品 [TR_AMETH_00102] 以及由原始设备制造商供应商执行的角色。

AP软件开发的主要步骤包括:

  • 架构和设计。

  • AP软件开发。

  • 集成和部署。

AP应用程序ARA层之上运行,并使用服务接口端口交换信息。AP方法学的集成和部署步骤对ara::com API的工作贡献重要。它支持生成服务接口描述 ARXML文件,该文件聚合了服务接口端口面向服务通信的服务接口由事件方法字段定义,这是独立于底层通信软件组件传输层完成的。

AP平台支持两种类型的端口,即提供端口所需端口提供端口细节和服务接口用于生成服务骨架类,所需端口细节和服务接口用于生成代理类代理类骨架类使用 ara::com API 与其他AP平台集群AP应用程序进行通信。

服务实例会进行配置,尤其是将服务实例绑定到选定的传输层,确定某个具体的服务实例提供服务还是需要服务,以及是否有到特定机器的映射关系。服务实例的配置情况会在服务实例清单中体现出来。

自适应软件的Executable通过执行清单来进行实例化。这里的实例化指的是将Executable绑定到操作系统特定进程的上下文环境中。根据机器模式的不同,每个进程可能会以不同的启动配置来启动。此外,执行清单还定义了软件进程之间的依赖关系。

7.4.2 服务接口

ara::com的角度来看,最重要的元模型元素服务接口(SI),因为它从签名方面定义了 ara::com代理或骨架。服务接口描述了一个服务接口由哪些方法、字段和事件组成,以及这些元素的签名(参数数据类型)是什么样子。所以,5.1 基本上是元模型服务接口真实元模型数据类型系统的简化。

元模型元素服务接口ara::com 之间的关系很清楚:ara::com代理类骨架类是从服务接口生成的。

7.4.3 软件组件

AUTOSAR方法论定义了一个比接口更高层次的元素,就是软件组件软件组件的理念是用定义良好的接口描述一个可重用的软件部分。为此,AUTOSAR清单规范定义了一个模型元素 SoftwareComponentType,它是一个抽象元素,有几个具体的子类型,其中子类型 AdaptiveApplicationSwComponentType对于AP应用软件开发人员来说是最重要的。一个 SoftwareComponentType 模型元素由 C++代码实现。这样一个组件 “向外部提供” 或 “从外部需要” 哪些服务接口是通过端口来表达的。端口服务接口进行类型化提供端口P-ports)表示类型化该端口的服务接口是被提供的,而所需端口R-ports)表示类型化该端口的服务接口是被 SoftwareComponentType所需要的。

图 7.6 给出了一个大致的概念,即模型视图如何与代码实现相关联。

图的上部分表示两种不同软件组件类型A和B(元模型层面),在实现层面(图的下部分)存在具体的实现。软件组件类型A的所需端口R-Port)的实现基于实现层面上的ara::com代理类的一个实例,而软件组件类型B的提供端口P-Port)的实现则使用ara::com骨架类的一个实例。代理类骨架类是从服务接口定义生成的,相应的端口引用了这个服务接口,例子中,它是我们一直使用的服务接口 “RadarService”。

SoftwareComponentType实现的代码片段显然可以被重用。AdaptiveApplicationSwComponentType的实现,在C++实现层面上,通常归结为一个或几个 C++的类。所以,重用仅仅意味着在不同的上下文中多次实例化这个类或这些类。在这里,我们基本上可以区分以下情况:

  • 在代码中显式地多次实例化C++类。

  • 通过多次启动 / 运行同一个Executable进行隐式地多次实例化。

第一种情况仍然属于 “实现层面” 的范畴。

上图展示了一个示例,其中 A 和 B 的实现被实例化在不同的上下文中。左下角有一个Executable 1,它直接使用了两个 A的实现实例和一个B的实现实例。与此相反,右侧展示了一个Executable 2,它 “直接”(即在其最顶层)使用了一个B的实现实例和一个复合软件组件的实例,而这个复合软件组件自身 “在其内部” 又实例化了一个A的实现实例和一个B的实现实例。注意:这种从其他组件组成软件组件以形成复合品的自然实现概念在 AUTOSAR元模型中以组合软件组件类型(CompositionSwComponentType)的形式得到了充分体现,它本身就是一个软件组件类型,并允许软件组件的任意递归嵌套 / 组合。

另一方面,第二种情况属于 “部署层面” 的范畴,并将在下面的子章节中进行说明。

7.4.4 AP应用程序/Executable和进程

AP 中的可部署软件单元被称为AP应用程序(相应的元模型元素是 AdaptiveAutosarApplication)。这样一个AP应用程序由 1 ~ n 个Executable组成,而Executable又是通过CompositionSwComponentType(具有任意嵌套)的实例化构建而成,如前一章所述。通常,集成商然后决定到底启动哪些AP应用程序(以其 1 ~ n 个Executable的形式)以及启动某个AP应用程序/其相关Executable的次数。这意味着这种隐式实例化,不需要编写特定的代码!而是需要集成商必须处理机器配置,以配置应用程序的启动次数。一个启动的AP应用程序然后会变成 1 个到 n 个进程(取决于它由多少个Executable组成)。我们将此称为 “部署层面”。

上图展示了一个简单的例子,其中有两个 AP 应用程序,每个应用程序恰好由一个 Executable 组成。具有 Executable1 的 AP 应用程序 1 被部署两次,在 Executable 启动后启动进程 1 和进程 2,而由 Executable2 组成的应用程序 2 被部署一次,在启动后启动进程 3。

7.4.5 基于 ara::com 的应用程序代码中使用元模型标识符

到目前为止对元模型 /ara::com 关系的解释应该有助于理解在 4.3 中描述的 ResolveInstanceIDs 中使用的 instance specifier 的结构。如前一章所述并在图 7.6 中描绘的那样,instance specifier 以某种方式与 SoftwareComponentType 模型中的相应端口相关联。如果你阅读了前面的章节,仅模型的端口名称不足以在其最终实例化中明确地识别它,因为相同的组件实现可能在代码中被多次实例化,然后最终在不同的进程中多次启动。实例 ID 显然必须分配给对象,这些对象在部署中最终具有独特的标识。

上图用一个简单的例子概述了 “问题”。在Executable 2 中,在不同的上下文中(嵌套级别)有三个SoftwareComponentTypeB 实现的实例化。所有实例都提供了一个特定的服务接口 “RadarService” 实例。应用于进程 2 服务实例清单的集成商必须在 ara::com级别上进行技术映射。也就是说,他必须决定在每个 B实例化中使用哪种技术传输绑定,以及随后的哪种技术传输绑定特定实例ID。在我们的例子中,集成商希望在右侧嵌套在复合组件中的 B实例化的上下文中通过 SOME/IP 绑定提供服务接口 “RadarService”,并使用 SOME/IP 特定实例 ID “1”,而他决定在左侧的 B 实例化的上下文中通过本地 IPC(Unix 域套接字)绑定提供服务接口 “RadarService”,并使用 Unix 域套接字特定实例 ID“/tmp/Radar/3” 和 “/tmp/Radar/4”,这些 B实例化没有嵌套(它们在Executable的 “顶层” 实例化)。在这里很明显,在服务实例清单中,它允许指定进程内的端口实例化技术绑定及其具体实例ID 的映射,仅使用来自模型的端口名称是不够区分的。为了在Executable(以及因此在进程中)获得唯一标识符,必须考虑SoftwareComponentType的嵌套实例化和重用的性质。每次SoftwareComponentType被实例化时,它的实例化在其实例化上下文中都会获得一个唯一的名称。这个概念适用于 C++ 实现级别和 AUTOSAR元模型级别!

在我们的具体例子中,这意味着:

  • 顶层的B实例化在其级别上获得唯一名称:“B_Inst_1” 和 “B_Inst_2”。

  • 复合组件类型内的B实例化在这个级别上获得唯一名称:“B_Inst_1”。

  • 顶层的复合组件实例化在其级别上获得唯一名称:“Comp_Inst_1”。

  • Executable /进程的角度来看,我们因此对B的所有实例都有唯一标识符

    • B_Inst_1”。

    • B_Inst_2”。

    • Comp_Inst_1::B_Inst_1”。

对于AP软件组件开发人员来说,这意味着:如果你构建一个实例说明符并通过ResolveInstanceIDs()将其转换为 ara::com::InstanceIdentifier,或者直接与 FindService ()一起使用(R端口),或者作为骨架构造函数参数而使用(P端口),那么实例说明符的形式应该是这样的:

< 上下文标识符 >/< 端口名称 >

端口名称AdaptiveApplicationSwComponentType的模型中获取。由于你不一定是决定你的组件在哪里以及部署多少次的人,你应该预见到,你的AdaptiveApplicationSwComponentType实现可以接收一个字符串化的 <上下文标识符>,你可以:

  • 在构建ara::core::InstanceSpecifier实例化反映你自己的组件端口代理/骨架时直接使用它。

  • “传递” 给从你自己的AdaptiveApplicationSwComponentType实现实例化的其他AdaptiveApplicationSwComponentType实现(即创建一个新的嵌套级别)。

注意:由于 AUTOSAR AP 没有规定元模型级别组件模型应如何转换为(C++)实现级别组件实例化(组件的嵌套)以及 <上下文标识符> 的 “传递”,这取决于实现者!对于可多次实例化的AdaptiveApplicationSwComponentType,通过一个 <上下文标识符>构造函数参数来解决这个问题可能是一个 “自然” 的解决方案。

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

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

相关文章

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1&#xff09;不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

MacOS通过X11转发远程运行virt-manager进行虚机分配

今天需要通过本地macbook机器连接远程物理机&#xff0c;执行虚机分配&#xff0c;现有文档仅提供window环境安装&#xff0c;如下整理Mac环境下的安装步骤 操作篇 前提条件 支持x11转发的terminal&#xff0c;我本地使用iTerm2&#xff1b;本地安装XQuartz&#xff0c;作为…

【AI系统】AI 基本理论奠定

虽然 AI 在今年取得了举世瞩目的进展与突破&#xff0c;但是其当前基于的核心理论神经网络等&#xff0c;在这波浪潮开始前已经基本奠定&#xff0c;并经历了多次的起起伏伏。神经网络作为 AI 的前身&#xff0c;经历了以下的发展阶段&#xff1a; 萌芽兴奋期&#xff08;约 19…

网络安全服务人才发展路线图

到2023年&#xff0c;全球网络安全支出规模将达到1512亿美元&#xff08;约合10640.4亿元人民币&#xff09;&#xff0c;并将以9.4%的年复合增长率持续增长。与火爆的产业现状相比&#xff0c;中国的网络安全服务人才面临巨大缺口。相关数据显示&#xff0c;我国网络安全人才缺…

STM32 ADC 读取模拟量

问题 我有一个调速开关&#xff0c;模拟量输入&#xff0c;因此需要使用 STM32 读取模拟量&#xff0c;并通过串口输入来调试。串口相关知识参考 STM32 串口输出调试信息。 硬件信息: CubeMX version 6.12.1Keil uVision V5.41.0.0 参考知识 【STM32】HAL库 STM32CubeMX教…

[每周一更]-(第124期):模拟面试|缓存面试思路解析

文章目录 31 为什么 Redis 不立刻删除已经过期的数据?1. Redis 是怎么删除过期 key 的?2. Redis 为什么不立刻删除已经过期的 key?3. Redis 为什么不每个 key 都启动一个定时器,监控过期时间?4. Redis 是如何执行定期删除的?5. 为什么 Redis 在定期删除的时候不一次性把所…

操作系统——揭开盖子

计算机执行时——取指执行 es:bx等于从0x9000开始&#xff0c;到0x90200结束

uni-app 认识条件编译,了解多端部署

一. 前言 在使用 uni-app 进行跨平台开发的过程中&#xff0c;经常会遇到需要针对不同平台或不同环境进行条件编译的情况。条件编译是一种在编译过程中根据指定条件选择不同代码路径的技术&#xff0c;可以帮助我们在不同平台或环境下编写不同的代码&#xff0c;以适应不同的平…

模糊控制系统的设计(取材bilibili_蓝天的季洁)

模糊控制原理和传统控制原理&#xff0c;在框图上的区别实际上只在控制器方面存在差异&#xff0c;将传统的控制器改为了模糊控制器&#xff08;fuzzy controller&#xff09;。 通过举例说明&#xff0c;将原有的[0,100]的参数通过隶属函数规则&#xff0c;&#xff08;类似于…

pytest日志总结

pytest日志分为两类&#xff1a; 一、终端&#xff08;控制台&#xff09;打印的日志 1、指定-s&#xff0c;脚本中print打印出的信息会显示在终端&#xff1b; 2、pytest打印的summary信息&#xff0c;这部分是pytest 的默认输出&#xff08;例如测试结果PASSED, FAILED, S…

向量数据库FAISS之四:向量检索和 FAISS

来自 YouTube 1.相似度搜索的传统方法(Jaccard, w-shingling, Levenshtein) 1.Jaccard 距离 公式 Jaccard ( A , B ) 1 − ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard}(A, B) 1 - \frac{|A \cap B|}{|A \cup B|} Jaccard(A,B)1−∣A∪B∣∣A∩B∣​ 其中&#xff0c; A 和 …

深入探究蓝牙节能技术:SNIFF与HOLD模式

目录 一、概述 1.1. Sniff Mode&#xff08;嗅探模式/呼吸模式&#xff09; 1.1.1.定义与目的 1.1.2 工作原理 1.1.3 进入与退出 1.2. Hold Mode&#xff08;保持模式&#xff09; 1.2.1. 定义与目的 1.2.2. 工作原理 1.2.3. 进入 1.2.4. 通知机制 二、Sniff mode&a…

Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)

Linux驱动开发快速入门——字符设备驱动 前言 笔者使用开发板型号&#xff1a;正点原子的IMX6ULL-alpha开发板。ubuntu版本为&#xff1a;20.04。写此文也是以备忘为目的。 字符设备驱动 本小结将以直接操作寄存器的方式控制一个LED灯&#xff0c;可以通过read系统调用可以…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

电子电气架构 ---漫谈车载网关

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

@Autowired与构造器注入区别,为什么spring推荐使用构造注入而不是Autowired?

目录 1.简介 2.了解两种注入方式的全过程 2.1 Autowired字段注入 2.2 构造函数注入 3.使用autowired注解注入有以下问题 3.1空指针异常 3.2测试不友好 4.使用Lombok去简化构造函数注入的臃肿代码 5.小结 5.1注解注入 5.2构造函数注入 1.简介 使用Spring开发时&#…

优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本

Transformer 架构由 Vaswani 等人在 2017 年发表的里程碑式论文《Attention Is All You Need》中首次提出&#xff0c;如今已被广泛认为是过去十年间最具开创性的科学突破之一。注意力机制是 Transformer 的核心创新&#xff0c;它为人工智能模型提供了一种全新的方法&#xff…

在Excel中处理不规范的日期格式数据并判断格式是否正确

有一个Excel表&#xff0c;录入的日期格式很混乱&#xff0c;有些看着差不多&#xff0c;但实际多一个空格少一个字符很难发现&#xff0c;希望的理想格式是 1980-01-01&#xff0c;10位&#xff0c;即&#xff1a;“YYYY-mm-dd”&#xff0c;实际上数据表中这样的格式都有 19…

医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22

小罗碎碎念 今天给大家推荐一本入门书籍。 这本书由Uday Kamath、Kenneth L. Graham和Wael Emara撰写&#xff0c;深入探讨了Transformer模型在机器学习领域的应用&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;。 原文pdf已经上传至知识星球的【入门书籍】专栏&…

SpringCloud Gateway转发请求到同一个服务的不同端口

SpringCloud Gateway默认不支持将请求路由到一个服务的多个端口 本文将结合Gateway的处理流程&#xff0c;提供一些解决思路 需求背景 公司有一个IM项目&#xff0c;对外暴露了两个端口8081和8082&#xff0c;8081是springboot启动使用的端口&#xff0c;对外提供一些http接口…