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大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...

表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...

SDU棋界精灵——硬件程序ESP32实现opus编码
一、 音频处理框架 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) main/components/audio_pipeline/afe_processor.c功能: 声学回声…...