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])。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自定义中文排序在Java中的实现与注意事项

目录 前言1. 基本知识2. 实战 前言 #1024程序员节 | 征文# 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 原先的Java中文…

Ubuntu(22.04)本地部署Appsmith

Ubuntu&#xff08;22.04&#xff09;安装Appsmith 简要介绍 Appsmith 是一个开源的低代码开发平台&#xff0c;旨在帮助开发者和非开发者快速构建定制化的内部应用程序和管理工具。通过直观的拖拽界面和丰富的预配置组件&#xff0c;Appsmith 让用户无需编写大量代码即可创建…

【C++】string类(2)

&#x1f973;个人主页: 起名字真南 &#x1f973;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 引言1 模拟实现string类基本框架2 实现string类中的主要成员函数2.1 Push_Back 函数2.2 reserve 函数2.3 append 函数2.4 c_str 函数2.5 begin ,end 函数2.5 operator 函数2.6…

IDEA开发工具使用技巧积累

一、IDEA 工具设置默认使用maven的settings.xml文件 第一步&#xff1a;打开idea工具&#xff0c;选中 File ——> New Projects Setup ——> Settings for New Projects 第二步&#xff1a;先设置下自动构建项目这个选项 第三步&#xff1a;选中 Build Tools ——>…

word删除空白页 | 亲测有效

想要删掉word里面的末尾空白页&#xff0c;但是按了delete之后也没有用 找了很久找到了以下亲测有效的方法 1. 通过鼠标右键在要删除的空白页面处显示段落标记 2. 在字号输入01&#xff0c;按ENTER&#xff08;回车键&#xff09; 3.成功删除了&#xff01;&#xff01; PS…

Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容

介绍 在当今数据驱动的世界中&#xff0c;抓取动态网页内容变得越来越重要&#xff0c;尤其是像抖音这样的社交平台&#xff0c;动态加载的评论等内容需要通过特定的方式来获取。传统的静态爬虫方法难以处理这些由JavaScript生成的动态内容&#xff0c;Selenium爬虫技术则是一…

基于SSM大学校医院信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;校医管理&#xff0c;用户管理&#xff0c;在线问诊管理&#xff0c;线上挂号管理&#xff0c;病例记录管理&#xff0c;系统管理 校医账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…

用Java爬虫API,轻松获取taobao商品SKU信息

在电子商务的世界里&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;是商品管理的基础。对于商家来说&#xff0c;SKU的详细信息对于库存管理、价格策略制定、市场分析等都有着重要作用。taobao作为中国最大的电子商务平台之一&#xff0c;提供…

uniapp 微信小程序分包操作

1. 在项目根目录创建一个新的目录&#xff0c;名称为分包名称 2. 打开manifest.json&#xff0c;选择源码视图&#xff0c;加入以下代码 "optimization" : {"subPackages" : true } 3. 在pages.json中&#xff0c;pages后面添加分包代码 "subPackag…

Linux基础命令(入门)

linux 用户 root 用户 一个特殊的管理帐户 也被称为超级用户 root已接近完整的系统控制 对系统损害几乎有无限的能力 除非必要,不要登录为 root 普通&#xff08; 非特权 &#xff09; 用户权限有限 造成损害的能力比较有限 linux的哲学思想&#xff08;优点&#xf…

【Canvas与图标】制作电脑桌面图标

【成图】 制成的三种图标&#xff0c;都是120*120的。 制作时观察的大图 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>desk…

操作系统学习笔记2.1进程与线程

文章目录 概念 组成 特征状态与转换进程控制1. 进程的状态2. 进程控制块&#xff08;PCB&#xff09;3. 进程的创建与终止进程的创建进程的终止 4. 进程调度5. 进程间通信&#xff08;IPC&#xff09;6. 上下文切换 进程通信1. **管道&#xff08;Pipes&#xff09;**2. **信号…

C++ | Leetcode C++题解之第502题IPO

题目&#xff1a; 题解&#xff1a; typedef pair<int,int> pii;class Solution { public:int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {int n profits.size();int curr 0;priority_queue<int, vect…

Prometheus 告警

github alertmanager 文档 Prometheus Alerting rules Prometheus alerting configuration 前几篇文章讲了Prometheus的监控&#xff0c;这一篇文章&#xff0c;讲通过监控指标触发告警 常用的告警方式有发邮件、调用指定接口(webhook) 等。本文讲解webhook方式&#xff0c;完…

ARL 灯塔 | ARL 灯塔 — 字典替换

关注这个工具的其它相关内容&#xff1a;自动化信息收集工具 —— ARL 灯塔使用手册 - CSDN 博客 0x01&#xff1a;ARL 字典替换 —— 理论篇 ARL&#xff08;Asset Reconnaissance Lighthouse&#xff09;在进行目标域名探测时&#xff0c;依赖的是其内置的默认字典集。然而在…

从零开始:Python与Jupyter Notebook中的数据可视化之旅

目录 **理解数据与数据可视化的基本流程****了解Python与其他可视化工具****掌握Anaconda、Jupyter Notebook的常用操作方法****原理** 环境配置1. **安装Anaconda软件&#xff0c;创建实验环境**2. **安装Jupyter Notebook**3. **创建第一个Jupyter Notebook文本**&#xff08…

nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理

目录 1. 数据集处理 1.1 实现脚本 1.2 json文件 2. 设置读取路径 2.1 设置路径 2.2 数据集转换 2.3 数据集预处理 2.4 训练&#xff08;3d_fullres) 3. 训练结果展示 关于nnUnet 数据集的处理和环境搭建&#xff0c;参考上文&#xff1a;第四章&#xff1a;nnUnet大模…

94、Python之异常:自定义异常以满足业务个性化需求

引言 前面介绍了Python中内置的异常类的继承体系&#xff0c;通常来说&#xff0c;这些异常类已经能够满足各种异常的场景需要。但是&#xff0c;有时还是需要自定义异常&#xff0c;来满足一些个性化的需求&#xff0c;以及更加可控、精细化的异常管理。 本文就来介绍一下如…

使用InternVL、LMDeploy和GTE搭建多模态RAG系统

如何将视觉大模型&#xff08;VLM&#xff09;与 多模态RAG 结合起来&#xff0c;创建服装搜索和搭配推荐&#xff01;本文展示了InternVL模型在分析服装图像和提取颜色、款式和类型等关键特征方面的强大功能。 InternVL2是国内首个在MMMU(多学科问答)上突破60的模型&#xff0…

MT-Pref数据集:包含18种语言的18k实例,涵盖多个领域。实验表明它能有效提升Tower模型在WMT23和FLORES基准测试中的翻译质量。

2024-10-10&#xff0c;由电信研究所、里斯本大学等联合创建MT-Pref数据集&#xff0c;它包含18种语言方向的18k实例&#xff0c;覆盖了2022年后的多个领域文本。通过在WMT23和FLORES基准测试上的实验&#xff0c;我们展示了使用MT-Pref数据集对Tower模型进行对齐可以显著提高翻…