AUTOSAR_EXP_ARAComAPI的6章笔记(2)

☞返回总目录

相关总结:AutoSar AP CM实例说明符的使用方法总结

6.2 实例说明符的使用方法

一、InstanceSpecifier 的概念

InstanceSpecifier 是在 [3] 中定义的一个核心概念,它由符合特定模型元素绝对路径的模型元素 shortName 组成,表现为以 “/” 分隔的列表。通俗地说,InstanceSpecifier 在自适应平台模型和应用程序之间架起了桥梁,允许应用程序代码明确地引用由系统模型定义的资源实例。

InstanceSpecifier 所引用的实例可能有很多不同的种类:provided/required 服务实例、key/value 存储或 file 存储,或者加密资源等等。

二、InstanceSpecifier 在 C++ 语言绑定中的特征

在自适应平台的 C++ 语言绑定中,InstanceSpecifier 类有几个共同的特征:

  • 不可默认构造。
  • 可复制和可移动。
  • 可与 StringView 和其他 InstanceSpecifier 对象进行比较。
  • 可显式转换为 StringView。

有关更详细的信息,请参见 4.8.1 小节中的清单 4.2。

考虑到这些特性,创建一个非现有对象的副本或移动结果的新 InstanceSpecifier 对象的唯一方法是从一个 StringView 对象创建。

在实际应用中,这种 StringView 的内容在构造时仅进行语法检查而不进行语义检查。这意味着只要源 StringView 对象包含由仅由有效字符组成且以 “/” 分隔的名称列表,构造就会成功。该列表所描述的路径在(源自应用程序的)模型中的有效性将在不同的功能集群尝试访问或实例化由相关 InstanceSpecifier 指向的资源时进行检查。

三、使用示例

以下示例根据 [1:AUTOSAR_SWS_CommunicationManagement] 做成,InstanceSpecifier 可能通过骨架类和代理类来实例化和访问服务。InstanceSpecifier 指向与服务相关联的端口原型的实例。因此,可以为每个 PortPrototype 创建多个 InstanceSpecifier。在下面的示例中,SwComponentInstance_0 和 SwComponentInstance_1 是同一个 SwComponentPrototype 的两个实例化,它们包含 RPortPrototype RPort_3。

(一)使用骨架的实例说明符示例

#include "ara/core/instance_specifier.h"
#include "ara/com/sample/tire_skeleton.h"class TireSkeletonImplementation : 
public ara::com::sample::skeleton::TireSkeleton
{
public:using TireSkeleton::TireSkeleton;// 实现服务接口方法,如果有的话
};int main()
{const ara::core::InstanceSpecifier tire0_Instance{"/ServerExe/RootSWCP_0/Comp_Lvl1/Comp_Lvl2/SwComponentInstance_0/PPort_3"};const ara::core::InstanceSpecifier tire1_Instance{"/ServerExe/RootSWCP_0/Comp_Lvl1/Comp_Lvl2/SwComponentInstance_1/PPort_3"};TireSkeletonImplementation tire0(tire0_Instance);TireSkeletonImplementation tire1(tire1_Instance);// 当骨架实例运行、处理请求等时睡眠return 0;
}

(二)使用代理的实例说明符示例

#include "ara/core/instance_specifier.h"
#include "ara/com/sample/tire_proxy.h"int main()
{using Proxy = ara::com::sample::proxy::TireProxy;const ara::core::InstanceSpecifier tire0_Instance{"/ClientExe/RootSWCP_0/Comp_Lvl1/Comp_Lvl2/SwComponentInstance_0/RPort_3"};const ara::core::InstanceSpecifier tire1_Instance{"/ClientExe/RootSWCP_0/Comp_Lvl1/Comp_Lvl2/SwComponentInstance_1/RPort_3"};auto tire0_handles = Proxy::FindService(tire0_Instance).ValueOrThrow();auto tire1_handles = Proxy::FindService(tire1_Instance).ValueOrThrow();Proxy tire0(tire0_handles[0]);Proxy tire1(tire1_handles[0]);// 调用方法、订阅事件等return 0;
}

四、AUTOSAR Adaptive 实现与特定于进程的清单

在这些例子中,AUTOSAR Adaptive 实现会管理具有独立上下文的特定于进程的清单。这些可以在进程启动时通过例如命令行参数、环境变量、工作目录内容或任何其他特定于实现的方式来指定。

6.2.1 从用户视角看基于清单的建模和配置 / 映射

用于查找服务的 InstanceSpecifier 映射到与该服务相关联的端口的特定实例。

使用 FindService 的 C++ 示例用法

#include "ara/core/instance_specifier.h"
#include "ara/com/sample/radar_proxy.h"int main() 
{using Proxy = ara::com::sample::proxy::radarProxy;//...ara::core::InstanceSpecifier portSpecifier{"fusionExe/fusion/radar_RPort"};auto res = Proxy::FindService(portSpecifier);//....
}

在应用设计中,可执行节点指定其根软件组件原型(RootSwComponentPrototype)。反过来,软件组件原型(SwComponentPrototype)定义一个或多个端口原型(PortPrototype)。

以下是相关的 XML 示例:

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00049.xsd"><AR-PACKAGES><AR-PACKAGE><AR-PACKAGE><SHORT-NAME>apd</SHORT-NAME><AR-PACKAGE><SHORT-NAME>da</SHORT-NAME><ELEMENTS><EXECUTABLE><SHORT-NAME>fusionExe</SHORT-NAME><CATEGORY>APPLICATION_LEVEL</CATEGORY><ROOT-SW-COMPONENT-PROTOTYPE><SHORT-NAME>fusion</SHORT-NAME><APPLICATION-TYPE-TREF DEST="ADAPTIVE-APPLICATION-SW-COMPONENT-TYPE">/apd/da/fusion</APPLICATION-TYPE-TREF></ROOT-SW-COMPONENT-PROTOTYPE></EXECUTABLE><ADAPTIVE-APPLICATION-SW-COMPONENT-TYPE><SHORT-NAME>fusion</SHORT-NAME><PORTS><R-PORT-PROTOTYPE><SHORT-NAME>radar_RPort</SHORT-NAME><REQUIRED-INTERFACE-TREF DEST="SERVICE-INTERFACE">/apd/da/radar</REQUIRED-INTERFACE-TREF></R-PORT-PROTOTYPE></PORTS></ADAPTIVE-APPLICATION-SW-COMPONENT-TYPE><SOMEIP-SERVICE-INTERFACE-DEPLOYMENT><SHORT-NAME>radar_Someip</SHORT-NAME><!-- ...... --></SOMEIP-SERVICE-INTERFACE-DEPLOYMENT></ELEMENTS></AR-PACKAGE></AR-PACKAGE></AR-PACKAGE></AR-PACKAGES>
</AUTOSAR>

请参见图 6.1 中的 SOME/IP 服务接口部署。Required 服务实例(RequiredServiceInstance)和实例说明符(InstanceSpecifier)之间的映射是通过服务实例清单(Service Instance Manifest)完成的。在服务实例清单中,服务实例到端口原型映射(ServiceInstanceToPortPrototypeMapping)定义了哪个服务实例与特定根软件组件原型(RootSwComponentPrototype)内的某个端口相关联。Required 服务实例将实例 ID 指定为 Required 服务实例 ID(RequireServiceInstanceId),在下面的示例中,此值为 19。

以下是相关的 XML 示例:

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00049.xsd"><AR-PACKAGES><AR-PACKAGE><AR-PACKAGE><SHORT-NAME>apd</SHORT-NAME><AR-PACKAGE><SHORT-NAME>da</SHORT-NAME><AR-PACKAGE><ELEMENTS><SHORT-NAME>instance</SHORT-NAME><SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING><SHORT-NAME>radar_RequiredServiceInstance_toMachine</SHORT-NAME><COMMUNICATION-CONNECTOR-REF DEST="ETHERNET-COMMUNICATION-CONNECTOR">/apd/da/fusionMachineDesign/fusionCommunicationConnector</COMMUNICATION-CONNECTOR-REF><SERVICE-INSTANCE-REFS><SERVICE-INSTANCE-REF DEST="REQUIRED-SOMEIP-SERVICE-INSTANCE">/apd/da/instance/radar_RequiredSomeipServiceInstance</SERVICE-INSTANCE-REF></SERVICE-INSTANCE-REFS><UDP-PORT>33111</UDP-PORT></SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING><SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING><SHORT-NAME>radar_RequiredServiceInstance_toPort</SHORT-NAME><PORT-PROTOTYPE-IREF><CONTEXT-ROOT-SW-COMPONENT-PROTOTYPE-REF DEST="ROOT-SW-COMPONENT-PROTOTYPE">/apd/da/fusionExe/fusion</CONTEXT-ROOT-SW-COMPONENT-PROTOTYPE-REF><TARGET-PORT-PROTOTYPE-REF DEST="R-PORT-PROTOTYPE">/apd/da/fusion/radar_RPort</TARGET-PORT-PROTOTYPE-REF></PORT-PROTOTYPE-IREF><PROCESS-REF DEST="PROCESS">/apd/da/fusion_instance1</PROCESS-REF><SERVICE-INSTANCE-REF DEST="REQUIRED-SOMEIP-SERVICE-INSTANCE">/apd/da/instance/radar_RequiredSomeipServiceInstance</SERVICE-INSTANCE-REF></SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING><REQUIRED-SOMEIP-SERVICE-INSTANCE><SHORT-NAME>radar_RequiredSomeipServiceInstance</SHORT-NAME><SERVICE-INTERFACE-DEPLOYMENT-REF DEST="SOMEIP-SERVICE-INTERFACE-DEPLOYMENT">/apd/da/deployment/radar_Someip</SERVICE-INTERFACE-DEPLOYMENT-REF><!-- ...... --><REQUIRED-MINOR-VERSION>0</REQUIRED-MINOR-VERSION><REQUIRED-SERVICE-INSTANCE-ID>19</REQUIRED-SERVICE-INSTANCE-ID></REQUIRED-SOMEIP-SERVICE-INSTANCE></ELEMENTS></AR-PACKAGE></AR-PACKAGE></AR-PACKAGE></AR-PACKAGE></AR-PACKAGES>
</AUTOSAR>

注意:可执行文件可以多次启动。每个进程都使用不同的服务实例清单启动,因此在不同的进程之间,实例说明符(InstanceSpecifier)和 Required 服务实例(RequiredServiceInstance)之间的映射将有所不同。

6.2.2 仅针对所提供服务的实例 ID

实例说明符(InstanceSpecifier)和实例标识符(InstanceIdentifier)可用于唯一标识所提供的服务。这意味着客户端知道他们正在与哪个特定的服务实例进行通信。对于所提供的服务,缺少此信息。客户端无法使用实例标识符进行唯一标识,因此服务器无法确定它正在与哪个客户端进行通信。在大多数情况下,这不是问题,但是我们设想,对于安全性而言,这可能是一个问题。对于这些情况,我们建议使用方法 E2E_check 的 E2E 参数 dataID(请参见 [10:E2E Protocol Specification AUTOSAR_PRS_E2EProtocol] 中的 [PRS_E2E_00323])。

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

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

相关文章

【10月最新】植物大战僵尸杂交版即将新增【植物】内容介绍预告(附最新版本下载链接)

新增植物 玉米旋转机 玉米旋转机是一种支持性植物&#xff0c;每4秒可散射6颗油炸玉米或黄油&#xff08;概率20%&#xff09;&#xff0c;油炸玉米经过火炬可变为爆米花&#xff0c;造成范围爆炸伤害。其价格为325&#xff0c;并在每种植一颗后&#xff0c;价格增加50。玉米旋…

Imagic: Text-Based Real Image Editing with Diffusion Models

https://openaccess.thecvf.com/content/CVPR2023/papers/Kawar_Imagic_Text-Based_Real_Image_Editing_With_Diffusion_Models_CVPR_2023_paper.pdfhttps://imagic-editing.github.io/ 问题引入 针对的是text based image editing问题&#xff0c;可以解决non rigid edit&am…

进程的了解

目录 一、进程控制块抽象&#xff08;PCB Process Control Block&#xff09; 1.pid&#xff1a;进程的身份标识 2.内存指针&#xff1a; 3.文件描述符表 进程的调度&#xff08;额外知识&#xff0c;不是进程属性&#xff09;&#xff1a; 4.进程的状态&#xff1a; 5.…

学习threejs,通过THREE.Raycaster给模型绑定点击事件

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Raycaster光线投射概…

Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程 1、为什么学习Go&#xff1f; 简单好记的关键词和语法&#xff1b;更高的效率&#xff1b;生态强大&#xff1b;语法检查严格&#xff0c;安全性高&#xff1b;严格的依赖管理&#xff0c; go mod 命令&#xff1b;强大的编译检查、严格的编码规范和完整的…

图神经网络

定义&#xff1a; 对图上所有的属性&#xff0c;包括顶点、边、全局、上下文进行的一个可以优化的变换&#xff0c;该变换可以保存住图的对称信息&#xff08;将顶点进行另外一个顺序的排序后&#xff0c;结果不变&#xff09; Message passing neural network&#xff1a;使…

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持&#xff1a;Java拥有丰富的网络编程库&#xff0c;如Apache HttpClient、OkHttp等&#xff0c;这些库提供了强大的HTTP请求功能&#xff0c;使得发送请求和处理响应变得简单。高效的数据处理&#xff1a;Java的数据处理能力&#xff0c;结…

使用Yolov10和Ollama增强OCR

1. 训练自定义 Yolov10 数据集 利用物体检测增强 OCR 的第一步是在数据集上训练自定义 YOLO 模型。YOLO&#xff08;只看一遍&#xff09;是一种功能强大的实时对象检测模型&#xff0c;它将图像划分为网格&#xff0c;使其能够在一次前向传递中识别多个对象。这种方法非常适合…

【某农业大学计算机网络实验报告】实验二 交换机的自学习算法

实验目的&#xff1a; &#xff08;1&#xff09;理解交换机通过逆向自学习算法建立地址转发表的过程。 &#xff08;2&#xff09;理解交换机转发数据帧的规则。 &#xff08;3&#xff09;理解交换机的工作原理。 实验器材&#xff1a; 一台Windows操作系统的PC机。 实…

Python|基于Kimi大模型,实现上传文档并进行“多轮”对话(7)

前言 本文是该专栏的第7篇,后面会持续分享AI大模型干货知识,记得关注。 假设有这样的需求,需要你通过python基于kimi大模型,上传对应的文档并根据对应的prompt提示词,进行多轮对话。此外,还需要将kimi大模型生成的内容进行存储。具体场景,如下图所示: 也就是说,当我们…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具&#xff0c;在GitHub上竟然能够积累1K的star&#xff0c;看来还是有点东西&#xff0c;当然官方的友链也是发挥了重要作用 首先送上项目地址&#xff0c;有能力的宝子可以自行查看 经典的网络抓包工具有很多&#xff0c;比如&#xff1a; Wireshark&…

KASan部署、使用与原理分析

文章目录 前言1、概述2、使用方法3、测试用例3.1、检测加载的内核模块3.2、检测调用的内核模块3.3、通过系统调用检测3.4、检测编译到Linux内核中的内核模块 4、工作原理4.1、影子内存&#xff08;Shadow Memory&#xff09;4.2、内存状态&#xff08;Memory States&#xff09…

Go小技巧易错点100例(十八)

正文&#xff1a; 使用下划线增加数字可读性 有时候我们代码里会定义很长的数字&#xff0c;虽然计算机程序能支持很大的数据的计算&#xff0c;但是对我们来说&#xff0c;可读性是一个需要考虑的点&#xff0c;特别是1后面全是0的时候。 但是这个问题在Go语言中是可以通过…

使用js和canvas实现简单的网页打砖块小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的←→控制移动&#xff0c;小球会不停移动&#xff0c;板子触碰小球时会反弹&#xff0c;碰撞到砖块时会摧毁砖块&#xff0c;如果没有用板子接住小球就游戏失败 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#x…

Leetcode—1226. 哲学家进餐【中等】(多线程)

2024每日刷题&#xff08;185&#xff09; Leetcode—1226. 哲学家进餐 C实现代码 class DiningPhilosophers { public:mutex mx;DiningPhilosophers() {}void wantsToEat(int philosopher,function<void()> pickLeftFork,function<void()> pickRightFork,functi…

云快充1.5协议+云快充1.6协议通讯框架

云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 介绍 云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 软件架构 1、提供云快充底层桩直连协…

Java【多线程】阻塞队列

目录 阻塞队列 阻塞队列是什么&#xff1f; 生产者消费者模型 生产者消费者模型的两个重要优势 1.解耦合&#xff08;不一定是两个线程之间&#xff0c;也可以是两个服务器之间&#xff09; 2.阻塞队列就相当于一个缓冲区&#xff0c;平衡了生产者和消费者的处理能力&…

【Web前端概述】

HTML 是用来描述网页的一种语言&#xff0c;全称是 Hyper-Text Markup Language&#xff0c;即超文本标记语言。我们浏览网页时看到的文字、按钮、图片、视频等元素&#xff0c;它们都是通过 HTML 书写并通过浏览器来呈现的。 一、HTML简史 1991年10月&#xff1a;一个非正式…

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础&#xff1a;神经网络、训练过程与激活函数 引言&#xff1a; 深度学习作为机器学习的一个子领域&#xff0c;近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构&#xff0c;使得计算机能够从数据中学习复杂的模式和特征&#xff0c;…

当小程序学会‘读心术’:表单处理的神秘法则

哈喽&#xff0c;我是阿佑&#xff0c;今天将给大家给咱们的小程序赋能——“读心术”&#xff01; 文章目录 微信小程序的表单处理表单元素&#xff1a;小程序的“语言”表单事件&#xff1a;小程序的“听觉”表单提交&#xff1a;小程序的“表达”总结 微信小程序的表单处理 …