首页 > 其他分享 >AUTOSAR_EXP_ARAComAPI的6章笔记(2)

AUTOSAR_EXP_ARAComAPI的6章笔记(2)

时间:2024-10-24 21:46:39浏览次数:3  
标签:AUTOSAR ARAComAPI radar da ara 实例 EXP InstanceSpecifier apd

☞返回总目录

相关总结: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])。

标签:AUTOSAR,ARAComAPI,radar,da,ara,实例,EXP,InstanceSpecifier,apd
From: https://blog.csdn.net/weixin_42108533/article/details/143170742

相关文章

  • vue3开启eslint报错:ESLint error: Parsing error: ‘>‘ expected,vue文件tsx语法报错解
    出错代码部分<scriptlang="tsx">import{defineComponent}from'vue';importMyComponentfrom'./components/childAbc';constApp=defineComponent({name:'App',setup(){return()=>(<div&......
  • MySQL 中使用 EXPLAIN判断索引使用情况
    MySQL中使用EXPLAIN判断索引使用情况与性能提升1.使用EXPLAIN分析查询在MySQL中,通过使用EXPLAIN关键字,可以分析SQL查询的执行计划,从而判断是否有效使用了索引。有效使用索引通常能够显著提升查询性能。2.输出字段说明在执行EXPLAIN后,MySQL会返回多个字段,以下......
  • AUTOSAR架构下,持续集成CI的最佳实践
    随着汽车电子技术的快速发展,汽车软件的复杂性与日俱增,如何确保软件开发的高效性与稳定性成为了一个关键问题。为了解决这个问题,许多汽车企业和供应商逐渐引入了AUTOSAR架构,并在此基础上构建了持续集成(CI)流程。今天,我们就来探讨一下基于AUTOSAR架构的CI流程实践,并通过对流程的详细......
  • DevExpress WinForms中文教程:Data Grid - 如何在代码中处理列?
    在本教程中,您将学习如何在分配数据源时启用或禁用自动列生成,如何手动填充列集合和访问单个列。请注意,本教程的重点是在代码中完成这些任务。显然您也可以使用网格的集成设计器对话框和VisualStudio的属性网格来做同样的事情,这将在单独的教程中进行描述。P.S:DevExpressWinForms......
  • 2024年资源勘探与地下工程技术国际论坛 (REUET 2024) 2024 International Symposium
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍2024年资源勘探与地下工程技术国际论坛(REUET2024)将作为主会议第六届智能控制......
  • git拉取代码时报错 cannot lock ref 'refs/remotes/origin/refactor': is at but exp
    这个错误通常发生在Git试图更新远程引用(如分支或标签)时,但本地的引用与远程的引用不匹配。具体来说,Git期望某个引用(如refs/remotes/origin/refactor)处于某个特定的提交(如4a06cb568),但实际上它指向了另一个提交(如7a05be1d8)。使用方法2解决成功解决方法清除远程引用缓存......
  • DevExpress中文教程 - 如何在静态SSR模式下使用Blazor Drawer组件?
    Microsoft的.NET8UI框架引入了静态服务器端呈现模式(静态SSR)——组件在服务器端呈现,然后返回到客户端,没有任何交互,DevExpress BlazorDrawer组件需要交互式呈现模式来动态地改变其IsOpen状态。在本文中,我们将回顾在静态SSR渲染模式下动态显示/隐藏DevExpressBlazorDrawer组......
  • Exploring Qualcomm IPQ5332 and IPQ5322: The Champions of WiFi 7 Solutions
    AsWiFi7technologyrapidlyadvances,Qualcomm'sIPQ5332andIPQ5322chipshaveemergedaspopularchoicesforusers.Thesetwochipsnotonlyexhibitoutstandingperformancebutalsopossessuniquefeaturestailoredtodifferentnetworkrequirement......
  • Explain详解与索引优化最佳实践
    Mysql安装文档参考:http://note.youdao.com/noteshare?id=12bab3ad6bde2dc0db4158df1b23b7cd&sub=69BD07746CCF4F7DA94CCFB1C4E399E8Explain工具介绍使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在select语句之前增加explain关键字......
  • k8s 部署 node exporter
    创建namespacenode-exporter-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:ns-monitor拉取镜像quay.io/prometheus/node-exporter:v0.18.1nodeexporter的DaemonSetnode-exporter-daemonSet.yamlapiVersion:apps/v1kind:DaemonSetmetadata:na......