AutoSar AP 面向服务通信的提供者和消费者“连接”的方法

☞ 返回总目录

1 Instance Identifiers 和 Instance Specifiers 的概念

1.1 Instance Identifiers

  1. 作用和使用场景
    • 在 Proxy(代理)和 Skeleton(骨架)端,Instance Identifiers 非常重要。在客户端 / 代理端搜索服务的特定实例,或者在服务器 / 骨架端创建服务的特定实例时会使用到。
    • 在 ara::com API 级别,Instance Identifiers 通常是特定于技术绑定的标识符。例如,SOME/IP 使用 16 位无符号整数标识符区分同一服务类型的不同实例,而 DDS (DDS - RPC) 使用 String<256> 作为 service_instance_name。
  2. 接口定义
class InstanceIdentifier 
{
public:static ara::core::Result<InstanceIdentifier> Create(StringView serializedFormat) noexcept;explicit InstanceIdentifier(ara::core::StringView serializedFormat);ara::core::StringView ToString() const;bool operator==(const InstanceIdentifier& other) const;bool operator<(const InstanceIdentifier& other) const;InstanceIdentifier& operator=(const InstanceIdentifier& other);
};
  • 提供了接收字符串的构造函数,可以由字符串表示来构造。同时提供了 ToString () 方法,允许获取与 InstanceIdentifier 对应的字符串表示,使其具有 “可序列化” 的特性,便于传输、保存和重用。
  • 对于 ara::com 的用户来说,不应去解析这个字符串的内容,因为其内容高度特定于中间件产品 / 绑定。记录到日志通道可能有助于调试分析。

1.2 Instance Specifiers

  1. 作用和来源
    • 软件开发人员从 ara::com 提供的功能中获得特定于技术绑定的 ara::com::InstanceIdentifier。这种功能将软件开发人员在其领域中通常使用的逻辑本地名称转换为特定于技术 / 绑定的 ara::com::InstanceIdentifier,这个本地名称称为 “instance specifier”。
    • 其基本形式是:<context 0>/<context 1>/.../<context N>/<port name>。
  2. 接口定义
class InstanceSpecifier final
{
public:// ctor to build specifier from AUTOSAR short name identifier// with ’/’ as separator between package namesstatic Result<InstanceSpecifier> Create(StringView metaModelIdentifier);explicit InstanceSpecifier(StringView metaModelIdentifier);InstanceSpecifier(const InstanceSpecifier& other);InstanceSpecifier(InstanceSpecifier&& other) noexcept;InstanceSpecifier& operator=(const InstanceSpecifier& other);InstanceSpecifier& operator=(InstanceSpecifier&& other);~InstanceSpecifier() noexcept;StringView ToString() const noexcept;bool operator==(const InstanceSpecifier& other) const noexcept;bool operator==(StringView other) const noexcept;bool operator!=(const InstanceSpecifier& other) const noexcept;bool operator!=(StringView other) const noexcept;bool operator<(const InstanceSpecifier& other) const noexcept;
};

1.3 从 InstanceSpecifier 转换为 InstanceIdentifier

ara::com 提供了以下函数用于将 ara::core::InstanceSpecifier(软件开发人员领域中的本地名称)转换为技术 ara::com::InstanceIdentifier:

namespace ara {
namespace com {
namespace runtime {ara::core::Result<ara::com::InstanceIdentifierContainer> ResolveInstanceIDs(ara::core::InstanceSpecifier modelName);
}
}
}

这个 API 返回一个 ara::com::InstanceIdentifierContainer,代表一个 ara::com::InstanceIdentifier 的集合,原因是 AUTOSAR 支持集成人员可以在一个软件组件开发者可见的抽象标识符后面配置多个技术绑定(多重绑定特性)。调用 ResolveInstanceIDs () 的可能结果有:

  1. 空列表:集成器未能提供抽象标识符的映射,可能是配置错误。
  2. 单元素列表:常见案例,映射到一个具体技术绑定的一个具体实例 id。
  3. 多元素列表:映射到可能具有多个技术绑定的多个技术实例。
    从技术上讲,ResolveInstanceIDs () 的中间件实现从捆绑在进程中的服务实例清单中查找 ara::core::InstanceSpecifier,所以 ara::core::InstanceSpecifier 在捆绑的服务实例清单中必须是明确的。

1.4 InstanceIdentifier 和 InstanceSpecifier 的使用时机

  1. 一般情况
    • 软件开发人员使用来自软件组件模型领域的抽象 “instance specifiers” 是 “典型” 方法。ara::com 提供了典型的函数重载,使得开发人员在最常见的用例中无需手动调用 ResolveInstanceIDs () 将 ara::core::InstanceSpecifier 解析为 ara::com::InstanceIdentifier,只需使用 ara::core::InstanceSpecifier 即可。
    • ara::com::InstanceIdentifier 的直接使用和 ara::core::InstanceSpecifier 的手动解析更适用于具有特定 / 特殊用例的高级用户。
  2. InstanceIdentifier 的传输限制
    • ara::com::InstanceIdentifier 的格式依赖于供应商,并且包含技术绑定信息,所以其传输或存储可能非常危险。因为传输或重新存储之后,绑定可能不再存在,或者不同供应商的应用程序可能无法正确解释。

总之,在 AUTOSAR Adaptive Platform 中,Instance Identifiers 和 Instance Specifiers 在服务连接中起着关键作用,开发人员应根据具体情况选择合适的方式来使用它们。

2 ara::com 中的 Instance Identifiers 和 Instance Specifiers 是如何协同工作的?

在 ara::com 中,Instance Identifiers(实例标识符)和 Instance Specifiers(实例说明符)协同工作以实现服务的查找和创建,具体如下:

  1. 作用与来源
    1. Instance Identifiers
      • 作用:在 Proxy(代理)和 Skeleton(骨架)端用于确定特定的服务实例。
      • 来源:通常是特定于技术绑定的标识符,具体内容高度依赖于中间件产品。例如,SOME/IP 使用 16 位无符号整数标识符,DDS (DDS - RPC) 使用 String<256> 作为 service_instance_name。
    2. Instance Specifiers
      • 作用:软件开发人员在其领域中通常使用的逻辑本地名称,用于转换为特定于技术 / 绑定的 Instance Identifier。
      • 来源:基本形式是 <context 0>/<context 1>/.../<context N>/<port name>,来自 AUTOSAR 元模型(描述软件组件模型)。
  2. 转换过程
namespace ara {
namespace com {
namespace runtime {ara::core::Result<ara::com::InstanceIdentifierContainer> ResolveInstanceIDs(ara::core::InstanceSpecifier modelName);
}
}
}

这个函数将 Instance Specifiers 转换为 Instance Identifiers。其可能的结果包括空列表(配置错误)、单元素列表(映射到一个具体技术绑定的一个具体实例 id)和多元素列表(映射到可能具有多个技术绑定的多个技术实例)。
3. 协同工作方式

  1. 对于一般的软件开发人员,通常使用抽象的 “instance specifiers”,ara::com 提供的函数重载使得在最常见的用例中无需手动解析 Instance Specifiers 为 Instance Identifiers。
  2. 在特殊用例中,高级用户可能直接使用 Instance Identifier,并手动进行解析。例如,当需要在不同进程之间交换服务实例信息时,由于 Instance Identifier 已经准确地包含了所有特定于技术的信息,并且不需要通过服务实例清单的内容进行任何进一步的解析,所以可以在不同的进程中重新构建。但这也存在风险,因为其格式依赖于供应商且包含技术绑定信息,传输或存储后可能因绑定不存在或不同供应商的应用程序无法正确解释而出现问题。

综上所述,Instance Identifiers 和 Instance Specifiers 在 ara::com 中相互配合,为服务的查找、创建和跨进程通信提供了一种灵活但需要谨慎使用的机制。

3 实现服务的查找?

在 ara::com 中,Instance Identifiers(实例标识符)和 Instance Specifiers(实例说明符)通过以下方式实现服务的查找:

  1. Instance Specifiers 的作用
    Instance Specifiers 是软件开发人员在其领域中通常使用的逻辑本地名称,它来自 AUTOSAR 元模型,基本形式为 <context 0>/<context 1>/.../<context N>/<port name>。
  2. 转换为 Instance Identifiers
    通过 ara::com 提供的函数 ara::core::Result<ara::com::InstanceIdentifierContainer >ResolveInstanceIDs (ara::core::InstanceSpecifier modelName) 将 Instance Specifiers 转换为 Instance Identifiers。
    这个函数在中间件实现中从捆绑在进程中的服务实例清单中查找与给定的 Instance Specifiers 对应的 Instance Identifiers。如果 Instance Specifiers 在服务实例清单中明确,就可以找到对应的技术绑定的实例标识符。
  3. 使用 Instance Identifiers 进行服务查找
    1. 对于特定于技术绑定的中间件(如 SOME/IP 使用 16 位无符号整数标识符,DDS (DDS - RPC) 使用特定的字符串作为 service_instance_name),Instance Identifiers 提供了明确的标识来区分同一服务类型的不同实例。
    2. 在客户端 / 代理端,当需要搜索服务的特定实例时,使用这些 Instance Identifiers 来确定具体的服务实例。例如,在某些中间件中,通过特定的标识符可以在网络中找到对应的服务实例并建立连接。

总之,在 ara::com 中,通过将软件开发人员使用的 Instance Specifiers 转换为特定于技术绑定的 Instance Identifiers,实现了对服务实例的准确查找。

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

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

相关文章

《深入理解 Java 线程池:高效管理线程的利器》

线程池 1. 什么是线程池&#xff1f; ​ 线程池内部维护了若干个线程&#xff0c;没有任务的时候&#xff0c;这些线程都处于等待空闲状态。如果有新的线程任务&#xff0c;就分配一个空闲线程执行。如果所有线程都处于忙碌状态&#xff0c;线程池会创建一个新线程进行处理或…

滑动窗口(6)_找到字符串中所有字母异位词

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(6)_找到字符串中所有字母异位词 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f4…

STM32 芯片启动过程

目录 一、前言二、STM32 的启动模式三、STM32 启动文件分析1、栈 Stack2、堆 Heap3、中断向量表 Vectors3.1 中断响应流程 4、复位程序 Reset_Handler5、中断服务函数6、用户堆栈初始化 四、STM32 启动流程分析1、初始化 SP、PC 及中断向量表2、设置系统时钟3、初始化堆栈并进入…

【Transformer深入学习】之一:Sinusoidal位置编码的精妙

看苏神的文章提到&#xff1a;Transformer原论文使用Sinusoidal位置编码&#xff0c;作为位置编码的一个显式解&#xff0c;Google 在原论文中对它的描述寥寥无几&#xff0c;只是简单提及了它可以表达相对位置信息&#xff0c;并未提及这个编码的合理性。 看了几篇文章&#x…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

【数据结构】数据结构系列学习笔记——导航篇

一&#xff1a;概述 数据结构是计算机科学中的核心概念之一&#xff0c;是优化算法性能和资源利用率的关键。在软件开发和数据处理中&#xff0c;选择合适的数据结构对于算法的效率至关重要。数据结构的选择通常基于数据的使用模式&#xff0c;包括数据元素之间的关系、数据的存…

【专题】2024中国生物医药出海现状与趋势蓝皮书报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37719 出海已成为中国医药产业实现提速扩容的重要途径。目前&#xff0c;中国医药产业发展态势良好&#xff0c;创新能力不断增强&#xff0c;然而也面临着医保政策改革和带量集采带来的压力。政府积极出台多项政策支持医药企业出海…

Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令

我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆

本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 视频解说复述克隆样片 《我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆》样片 进入软件后可以直接搜索 VideoReapeat 或者依次点击 Python音频技术/视频tools 进入该模块。 该模块会消耗TTS文本转语…

【四范式】浅谈NLP发展的四个范式

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学&#xff0c;人工智能&#xff0c;语言学关于计算机和人类自然语言之间的相互作用的领域&#xff0c;是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…

kubernetes架构

kubernetes cluster由master和node组成&#xff0c;节点上运行着若干kubernetes服务Master节点&#xff1a; master是kubernetes cluster的大脑&#xff0c;运行着的Daemon服务包括kube-apiserver&#xff0c;kube-scheduler,kube-controller-manager&#xff0c;etcd和Pod网络…

Dify 中的讯飞星火平台工具源码分析

本文主要对 Dify 中的讯飞星火平台工具 spark 进行了源码分析&#xff0c;该工具可根据用户的输入生成图片&#xff0c;由讯飞星火提供图片生成 API。通过本文学习可自行实现将第三方 API 封装为 Dify 中工具的能力。 源码位置&#xff1a;dify-0.6.14\api\core\tools\provide…

出厂非澎湃OS手机解BL锁

脚本作者&#xff1a;酷安mlgmxyysd 脚本项目链接&#xff1a;https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass/ 参考 B站作者&#xff1a;蓝空穹 https://www.bilibili.com/read/cv33210124/ 其他参考&#xff1a;云墨清风、水墨青竹、Magisk中文网 决定解BL…

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象&#xff08;防止id错误--编辑界面等&#xff09;12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库&#xff0c;应该加密才放进去 定义一个md5的方法&#xff…

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】 描述 概述 在前端开发中&#xff0c;遇到TypeError: Cannot read properties of null (reading indexOf)这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法&#xff0c…

飞睿智能UWB BLE Tag蓝牙防丢器模块,APP测距定位一键绑定,安全守护每一刻

我们总在不经意间与生活中的小物件擦肩而过——钥匙遗忘在咖啡厅的角落&#xff0c;钱包遗失在拥挤的地铁&#xff0c;甚至孩子的书包在人群中悄然消失……每一次的失而复得都是幸运的眷顾&#xff0c;但更多的是遗憾与不便。今天&#xff0c;就让我带你走进一个智能守护的新世…

Linux驱动开发 ——架构体系

只读存储器&#xff08;ROM&#xff09; 1.作用 这是一种非易失性存储器&#xff0c;用于永久存储数据和程序。与随机存取存储器&#xff08;RAM&#xff09;不同&#xff0c;ROM中的数据在断电后不会丢失&#xff0c;通常用于存储固件和系统启动程序。它的内容在制造时或通过…

【算法】遗传算法

一、引言 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是一种模拟生物进化过程的启发式搜索算法&#xff0c;它通过模拟自然选择、遗传、交叉和突变等生物学机制来优化问题的解决方案。遗传算法因其通用性、高效性和鲁棒性&#xff0c;在多个领域中得到了广泛应用&a…

esp32核心跑分程序

https://github.com/ochrin/coremark/tree/esp32 最近一直捣腾esp32s3 (Sense) 做微型摄像。过程中发现一款不错的跑分软件&#xff0c;特此记一笔。 其中针对esp32s3各类参数设定&#xff08;用idf.py menuconfig)&#xff0c;做个记录。 CPU Frequency去240MHz&#xff08…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…