AUTOSAR_EXP_ARAComAPI的5章笔记(9)
☞ 返回总目录
5.4 骨架类(Skeleton Class)
骨架类是由AUTOSAR 元模型的服务接口描述(SI description)生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台(AP)产品供应商的工具链将生成一个完全实现此接口的骨架实现类。
生成的骨架类是一个抽象类。它不能直接实例化,因为它不包含服务应提供的服务方法的实现。因此,服务实现者必须继承骨架类并在子类中提供服务方法的实现。
注意:与代理类一样,骨架类必须提供的接口由ara::com定义,一个通用(与产品无关)的生成器可以生成一个抽象类或模拟类,应用程序开发人员可以针对其实现他的服务提供者应用程序。这非常适合独立于平台供应商的自适应 AUTOSAR 软件组件(SWC)的开发。
ara::com期望在命名空间 “skeleton” 中包含与骨架相关的工件。这个命名空间通常包含在从服务定义及其上下文推导出来的命名空间层次结构中。
5.4.1 Skeleton Class API
-
OfferService():提供服务实例。
-
StopOfferService():停止提供服务实例。
-
Send():发送。
-
Allocate():分配。
-
ProcessNextMethodCall():处理下一个方法调用。
-
RegisterGetHandler():注册获取处理程序。
-
RegisterSetHandler():注册设置处理程序。
-
Field::Update():更新字段。
5.4.2 RadarService Skeleton Class 示例
class RadarServiceSkeleton
{
public:/*** 构造函数,以实例标识符为参数,具有默认的请求处理模式 kEvent。*/RadarServiceSkeleton(ara::com::InstanceIdentifier instanceId,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent);/*** 无异常构造函数,以实例标识符为参数,具有默认的请求处理模式 kEvent。*/static ara::core::Result<RadarServiceSkeleton> Create(const ara::core::InstanceIdentifier &instanceID,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent) noexcept;/*** 构造函数,以实例标识符容器为参数,具有默认的请求处理模式 kEvent。* 这个特别支持多绑定。*/RadarServiceSkeleton(ara::com::InstanceIdentifierContainer instanceIds,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent);/*** 无异常构造函数,以实例标识符容器为参数,具有默认的请求处理模式 kEvent。*/static ara::core::Result<RadarServiceSkeleton> Create(const ara::core::InstanceIdentifierContainer &instanceIDs,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent) noexcept;/*** 构造函数,以实例说明符为参数,具有默认的请求处理模式 kEvent。*/RadarServiceSkeleton(ara::core::InstanceSpecifier instanceSpec,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent);/*** 无异常构造函数,以实例说明符为参数,具有默认的请求处理模式 kEvent。*/static ara::core::Result<RadarServiceSkeleton> Create(const ara::core::InstanceSpecifier &instanceSpec,ara::com::MethodCallProcessingMode mode = ara::com::MethodCallProcessingMode::kEvent) noexcept;/*** 骨架实例不可复制构造。*/RadarServiceSkeleton(const RadarServiceSkeleton& other) = delete;/*** 骨架实例不可复制赋值。*/RadarServiceSkeleton& operator=(const RadarServiceSkeleton& other) = delete;/*** 通信管理实现者应在其析构函数实现中注意,如果此服务实例之前已提供,则内部触发 StopOfferService()的功能。这是一个方便的清理功能。*/~RadarServiceSkeleton();/*** 提供服务实例。* 方法是幂等的 - 可以重复调用。*/ara::core::Result<void> OfferService();/*** 停止提供服务实例。* 方法是幂等的 - 可以重复调用。** 如果服务实例被销毁 - 期望通信管理实现内部调用 StopOfferService()。*/void StopOfferService();/*** 对于所有输出和非空返回参数,生成一个封闭结构,其中包含非空返回值和/或输出参数。*/struct CalibrateOutput {bool result;};/*** 对于所有输出和非空返回参数,生成一个封闭结构,其中包含非空返回值和/或输出参数。*/struct AdjustOutput {bool success;Position effective_position;};/*** 此方法从通信管理中获取下一个调用并执行它。返回值是一个 ara::core::Future。* 在应用程序错误的情况下,一个 ara::core::ErrorCode 存储在 ara::core::Promise 中,从该 Promise 返回 ara::core::Future 给调用者。* 仅在轮询模式下可用。*/ara::core::Future<bool> ProcessNextMethodCall();/*** \brief 公共成员用于 BrakeEvent。*/events::BrakeEvent BrakeEvent;/*** \brief 公共成员用于 UpdateRate。*/fields::UpdateRate UpdateRate;/*** 以下方法是纯虚函数,必须实现。*/virtual ara::core::Future<CalibrateOutput> Calibrate(std::string configuration) = 0;virtual ara::core::Future<AdjustOutput> Adjust(const Position& position) = 0;virtual void LogCurrentState() = 0;
};
5.4.3 实例化(构造函数)
正如你在上面的RadarServiceSkeleton Class的示例代码中看到的,服务实现者必须从其派生服务实现的骨架类提供了三种不同的构造函数变体,它们主要在确定要使用的实例标识符的方式上有所不同。
由于你可以部署同一类型(因此也是同一骨架类)的许多不同实例,因此在创建时必须给出一个实例标识符是很直接的。这个标识符必须是唯一的。在使用命名构造函数方法无异常地创建服务骨架时,静态成员函数Create()检查提供的标识符是否不唯一或是否有其他错误。如果发现错误,将在返回的ara::core::Result中设置错误代码。否则,返回创建的骨架实例。
如果要使用相同的标识符创建一个新实例,则需要先销毁现有的实例。
正是出于这个原因,骨架类(就像代理类一样)既不支持复制构造也不支持复制赋值!否则,对于一段时间内会存在两个具有相同实例标识符的 “相同” 实例,并且方法调用的路由将是不确定的。
关于实例标识符定义的不同构造函数变体反映了它们不同的性质,这在 4.8.1 小节中进行了描述。
-
带有ara::com::InstanceIdentifier的变体:服务实例将使用一个特定于绑定的实例标识符创建。
-
带有ara::com::InstanceIdentifierContainer的变体:服务实例将使用绑定到多个不同的实例标识符创建。这在本文档中被称为 “多绑定”,并在 7.3 节中进行了更详细的解释。
-
带有ara::core::InstanceSpecifier的变体:服务实例将使用在给定的ara::core::InstanceSpecifier进行 “服务清单” 查找后找到的实例标识符(多个)创建。请注意,这也可能意味着 “多绑定”,因为集成商可以在 “服务清单” 中将给定的ara::core::InstanceSpecifier映射到多个特定于技术 / 绑定的实例标识符。
构造函数的第二个参数类型为ara::com::MethodCallProcessingMode有一个默认值,并在 5.4.5 小节中进行了详细解释。
注意:直接在实现骨架的子类的实例创建后,这个实例对于潜在的消费者是不可见的,因此不会在其上调用任何方法。只有在使用OfferService API 使服务实例可见后(见下文)才可能。
相关文章:
AUTOSAR_EXP_ARAComAPI的5章笔记(9)
☞ 返回总目录 5.4 骨架类(Skeleton Class) 骨架类是由AUTOSAR 元模型的服务接口描述(SI description)生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台(AP)产品供应商的工具链将生成一个完…...
京东-第2题-撞车
Powered by:NEFU AB-IN Link 文章目录 京东-第2题-撞车题意思路代码 京东-第2题-撞车 题意 一条单向单车道的道路上有n辆车,第i辆车位于 xi;,速度大小为 vi。 显然,如果车辆保持此速度行驶下去,在大多数情况下都会发生碰撞。 现…...
Vue3流程图插件-Vue Flow
1、安装:通过 npm 或 yarn 安装 Vue Flow。 npm install vueflow/core# 或者yarn add vueflow/core 2、引入:在你的 Vue 3 项目中引入 Vue Flow。 import { VueFlow, Background, Controls, MiniMap } from vueflow/core;3、使用:在 Vue…...
初始网络编程(下)
所属专栏:Java学习 1. TCP 的简单示例 同时,由于 TCP 是面向字节流的传输,所以说传输的基本单位是字节,接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口(创建时绑定的端口&…...
java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)
这是什么系统? 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统,用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…...
第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作
宿主机的VM安装CENTOS文件无法快速上传,也不方便输入命令行,用SSH终端xshell连接虚拟机的SSH工具就方便多了,实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…...
Spring:统一结果私有属性造成的前端无法访问异常报错问题
用户未填写任何评价 1.问题复现 (1)看一段代码 controller: import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...
thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)
thinkphp 做分布式服务读写分离分库分表(分区) 引言 thinkphp* 大道至简一、分库分表分表php 分库分表hash算法0、分表的方法(thinkphp)1、ThinkPHP6 业务分表之一:UID 发号器2、ThinkPHP6 业务分表之二:用…...
webpack的使用
将js读取的目录改成读内存中的main.js,否则不会生效 为了 将index.html在打开首页的时候就能自动显示,就需要引入插件 指定开发环境运行的命令: dev:开发环境,build生产环境...
MATLAB智能优化算法-学习笔记(3)——大规模邻域搜索算法求解旅行商问题【过程+代码】
一、问题描述 旅行商问题(TSP, Traveling Salesman Problem)是组合优化中的经典问题之一。给定一组城市和每对城市之间的距离,要求找到一条最短的路径,使旅行商从某个城市出发,访问每个城市一次并最终回到出发点。TSP问题广泛应用于物流配送、工厂调度、芯片制造等领域。…...
货币单位换算 - 华为OD统一考试(E卷)
2024华为OD机试(E卷D卷)最新题库【超值优惠】Java/Python/C合集 题目描述 记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。 每行记录一条金额,金额带有货币单位,格式为数字单位&…...
95、k8s之rancher可视化
一、ranker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控----普罗米修斯 [rootmaster01 opt]# docker load -i rancher.tar ##所有节点 [rootmaster01 opt]# docker pull rancher/rancher:v2.5.7 ##主节点[rootmaster01 opt]# vim /etc/docker/daemon.jso…...
简单生活的快乐
小明经常会被问到一个问题:为什么他那么有钱却选择过一种简单、谦逊的生活。先从小明的早年经历说起吧,大概是他六到十三岁的时候,物质对他来说是非常重要的。他记得当妈妈给他买了一双昂贵的鞋子时,他特别兴奋,喜欢向…...
【JAVA开源】基于Vue和SpringBoot的在线文档管理系统
本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
大数据新视界 --大数据大厂之数据驱动决策:如何利用大数据提升企业竞争力
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【Linux】生产者消费者模型:基于阻塞队列,使用互斥锁和条件变量维护互斥与同步关系
目录 一、什么是生产者消费者模型 二、为什么要引入生产者消费者模型? 三、详解生产者消费者模型 编辑 生产者和生产者、消费者和消费者、生产者和消费者,它们之间为什么会存在互斥关系? 生产者和消费者之间为什么会存在同步关系&…...
多层感知机paddle
多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析,torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机(MLP,也称为神经网络࿰…...
linux-网络管理-网络服务管理 17 / 100
Linux 网络管理:网络服务管理 一、概述 在 Linux 系统中,网络服务管理是系统管理中的重要组成部分。网络服务通常涉及到多种协议、服务和工具,用于确保服务器与客户端、局域网与广域网、以及不同系统之间的通信畅通。Linux 提供了强大的工具…...
Docker上安装mysql
获取 MySQL 镜像 获取镜像。使用以下命令来拉取镜像: 1docker pull mysql:latest 这里拉取的是最新版本的 MySQL 镜像。你也可以指定特定版本,例如: 1docker pull mysql:8.0 运行 MySQL 容器 运行 MySQL 容器时,你需要指定一些…...
【秋招笔试-支持在线评测】8.28华为秋招(已改编)-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
