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大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…...
Qwen3-TTS开源模型快速上手:5分钟完成中文普通话+粤语+英文三语语音合成
Qwen3-TTS开源模型快速上手:5分钟完成中文普通话粤语英文三语语音合成 想不想让你的应用开口说话?不是那种机械的电子音,而是像真人一样,有感情、有语调,甚至能说方言的语音?今天要聊的Qwen3-TTSÿ…...
3大核心技术突破:MediaPipeUnityPlugin如何重塑Unity AI视觉开发边界?
3大核心技术突破:MediaPipeUnityPlugin如何重塑Unity AI视觉开发边界? 【免费下载链接】MediaPipeUnityPlugin Unity plugin to run MediaPipe 项目地址: https://gitcode.com/gh_mirrors/me/MediaPipeUnityPlugin MediaPipeUnityPlugin作为连接G…...
解锁7大加密场景:Cryptii离线工具全攻略
解锁7大加密场景:Cryptii离线工具全攻略 【免费下载链接】cryptii Web app and framework offering modular conversion, encoding and encryption 项目地址: https://gitcode.com/gh_mirrors/cr/cryptii 在数字化时代,数据安全与格式转换成为开发…...
Power BI视觉对象交互设计秘籍--巧用书签按钮实现动态提示
1. 为什么需要动态提示功能? 做数据分析报表最怕什么?不是数据不准,而是看报表的人看不懂。我见过太多这样的场景:精心设计的柱状图被用户误读,复杂的折线图被理解成完全相反的趋势。这时候你会想,要是有个…...
PySpur工作流追踪终极指南:实时监控AI代理执行过程的10个技巧
PySpur工作流追踪终极指南:实时监控AI代理执行过程的10个技巧 【免费下载链接】pyspur Minimalist AI Agent Graph UI 项目地址: https://gitcode.com/gh_mirrors/py/pyspur PySpur是一个极简主义的AI代理图形化界面工具,专为构建和监控复杂AI工作…...
WhisperX语音识别:如何实现70倍实时转录精度与词级时间戳?
WhisperX语音识别:如何实现70倍实时转录精度与词级时间戳? 【免费下载链接】whisperX m-bain/whisperX: 是一个用于实现语音识别和语音合成的 JavaScript 库。适合在需要进行语音识别和语音合成的网页中使用。特点是提供了一种简单、易用的 APIÿ…...
基于深度学习的CT肺部分割技术:在医学影像分析中实现95% Dice系数的精准自动化方案
基于深度学习的CT肺部分割技术:在医学影像分析中实现95% Dice系数的精准自动化方案 【免费下载链接】lungmask Automated lung segmentation in CT 项目地址: https://gitcode.com/gh_mirrors/lu/lungmask 在医学影像分析领域,CT肺部分割一直是临…...
高效音频获取与资源管理:喜马拉雅下载工具全解析
高效音频获取与资源管理:喜马拉雅下载工具全解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内容消费时代&a…...
SDMatte与前端框架React集成:打造交互式在线图片编辑工具
SDMatte与前端框架React集成:打造交互式在线图片编辑工具 1. 引言:为什么需要在线图片编辑工具 电商商家每天需要处理大量商品图片,传统PS操作门槛高且效率低下。而专业设计师又需要更灵活的工具进行创意表达。基于React框架和SDMatte构建的…...
【TC3xx芯片】Endinit机制实战:从解锁到上锁的完整代码解析
1. TC3xx芯片Endinit机制的核心作用 在嵌入式系统开发中,寄存器保护是确保系统稳定性的关键机制。TC3xx系列芯片采用的Endinit(End of initialization)保护方案,就像给重要寄存器装了一把智能密码锁。想象一下,你家的保…...
