AUTOSAR_EXP_ARAComAPI的5章笔记(15)

☞返回总目录

相关总结:AutoSar AP CM服务接口级别的数据类型总结

5.5 服务接口级别的数据类型

以下章节描述了在ara::com中服务接口用户定义数据类型的 C++ 语言映射。这里的 “用户定义” 是指那些不是由ara::com API 定义(例如InstanceIdentifierFindServiceHandleServiceHandleContainerara::com在其自己的命名空间中定义)的数据类型,而是由用户定义的服务接口描述(IDL)专门提供的。

在 AUTOSAR 元模型([2])中引入了CppImplementationDataTypes以适当地支持 C++14 数据类型系统的特定要求。

5.5.1 可选数据元素

在元模型中,StructureImplementationDataType内部的记录元素可以被定义为可选的,参见 [2]。这种可选性在ara::com API 中由模板类ara::core::Optional表示。

可选元素的序列化基于标签 - 长度 - 值(Tag-Length-Value)原则,而没有可选元素的StructureImplementationDataTypes不必使用标签。关于这种序列化如何工作的详细信息在 [9] 中指定。

ara::core::Optional模板参数可以包含记录元素的ImplementationDataType(或者应用数据类型),例如uint32

可选记录元素可用于每个服务接口(SI)元素(例如字段、事件和方法)的结构中,这种可选性定义在 SI 级别上。

如在 5.21(以下示例代码) 中,结构具有声明为可选的元素currenthealth,这些元素不是强制存在的。

客户端应用程序必须在运行时检查可选元素是否包含值。一个可选元素是否包含值取决于服务端应用程序。服务端应用程序可以为这个特定实例是否设置值。可选包含元素的特性为 SI 提供了向前和向后兼容性,因为新添加的记录元素可以被旧应用程序忽略。

/*** \brief 具有可选包含值的数据结构。*/
struct BatteryState {Voltage_t voltage;Temperature_t temperature;ara::core::Optional<Current_t> current;ara::core::Optional<Health> health;
};

5.21 代码示例 

在 5.22 中的骨架实现提供了在 5.21 中定义的BatteryState结构。实现知道可选标记元素current,但由于服务接口的新版本,不知道可选标记元素health。因此,骨架实现不会设置health

using namespace ara::com;class BatteryStateImpl : public BatteryStateSkeleton 
{
public:Future<BatteryState> GetBatteryState() {// 为简单起见,没有异步调用ara::core::Promise<BatteryState> promise;// 填充数据结构BatteryState state;state.voltage = 14;state.temperature = 35;state.current = 0;// state.health 未设置,因此不会被传输promise.set_value(state);auto future = promise.get_future();return future;}
};

5.22 代码示例  

在 5.23 中的代理消费在 5.21 中定义的BatteryState结构。骨架实现知道两个可选标记元素currenthealth。在访问可选元素之前,骨架实现必须检查可选元素是否真有值。因此,可选 API 提供了两种方法:operator boolhas_value方法。

using namespace ara::com;int main() {// 一些获取句柄的代码//...BatteryStateProxy bms_service(handle);Future<BatteryState> stateFuture = bms_service.GetBatteryState();// 接收 BatteryStateBatteryState state = stateFuture.get();// 检查可选包含元素是否存在if(state.current) {// 使用 optional::operator*访问可选元素的值if(*state.current >= MAX_CURRENT) {// 用这个信息做一些事情}}// 使用 optional::has_value()方法检查if(state.health.has_value()){// 使用 optional::value()方法访问可选元素的值if(state.health.value() >= BAD_HEALTH) {// 用这个信息做一些事情}}
}

5.23代码示例   

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

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

相关文章

2024前端面试题-1.自我介绍+常见考点汇总

一、自我介绍模板 个人信息教育背景工作经验技能专长优势特点 &#xff08;注&#xff1a;括号&#xff09;内的内容可视具体情况决定说不说。以下内容仅为个人想法&#xff0c;仅供参考交流&#xff0c;不喜勿喷&#xff0c;感谢留情~* 1、个人信息&#xff1a; 姓名&…

Leetcode 3325. Count Substrings With K-Frequency Characters I

Leetcode 3325. Count Substrings With K-Frequency Characters I 1. 解题思路2. 代码实现 题目链接&#xff1a;3325. Count Substrings With K-Frequency Characters I 1. 解题思路 这一题思路上就是一个滑动窗口。 我们考察窗口的左边界依次为0到n-1时右边界能够取到的最…

数据结构编程实践20讲(Python版)—19字典树

本文目录 19 字典树&#xff08;Trie&#xff09;S1 说明字典树结构字典树的构建与查找字典树的特点字典树的应用领域 S2 示例S3 应用1&#xff1a;基于 big.txt 实现单词的自动补全功能S3 应用2&#xff1a;实现 IP 路由中的最长前缀匹配S3 应用3&#xff1a;基于 Trie 的压缩…

THP4 SOP16 芯片 高速光耦芯片

光电耦合器输入端加电信号使发光源发光&#xff0c;光的强度取决于激励电流的大小&#xff0c;此光照射到封装在一起的受光器上后&#xff0c;因光电效应而产生了光电流&#xff0c;由受光器输出端引出&#xff0c;这样就实现了电一光一电的转换。 由于光耦合器输入输出间互相…

防火墙和堡垒机有什么区别?

防火墙和堡垒机在网络安全领域都扮演着至关重要的角色,但它们在功能、部署位置、作用范围等方面存在显著差异。 一、功能定位 防火墙:防火墙是一种网络安全系统,主要作用是在私有网络与公网之间建立一道安全屏障,监控和控制网络流量。它通过预定义的安全规则,决定哪些数…

5g工业路由器最新案例:高原气象站网络升级项目

背景&#xff1a; 某省气象局决定在高原地区升级其气象观测网络&#xff0c;以提高天气预报的准确性和及时性&#xff0c;同时为气候变化研究提供更可靠的数据支持。该项目面临以下挑战&#xff1a; 需要在高原广袤且地形复杂的区域部署大量自动气象站&#xff0c;要求网络覆…

【Excel】【VB和JS】表格内容姓名、卡号、身份证敏感信息转换为图片打印

VB代码&#xff1a; Function ConvertCellToImageAndPlace(n As Long, m As Long)Dim sourceCell As RangeSet sourceCell Sheets("Sheet2").Cells(n, m)sourceCell.CopyPicture Appearance:xlScreen, Format:xlPictureDim targetCell As RangeSet targetCell She…

优化SQL查询的最佳实践:提升数据库性能的关键

SQL 查询是数据库操作的核心&#xff0c;特别是当数据量庞大时&#xff0c;性能问题尤为明显。优化 SQL 查询不仅能减少响应时间&#xff0c;还能提高系统整体的可伸缩性。本文将从索引、查询结构、数据库设计和缓存等方面详细介绍如何优化 SQL 查询以提升性能。 一、索引的使…

kotlin 中 ::class ::class.java 和 .javaClass 区别

在 Kotlin 中&#xff0c;获取一个类的类对象&#xff08;Class 对象&#xff09;有几种不同的方式&#xff0c;包括 ::class、::class.java 和 .javaClass。每种方式都有其特定的用途和适用场景。下面是对这三种方式的详细解释&#xff1a; ::class 用途&#xff1a;获取 Kotl…

Java配置 Redis 连接互斥锁或队列预先加载缓存

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

【HuggingFace 如何上传数据集 (2) 】国内网络-稳定上传图片、文本等各种格式的数据

【HuggingFace 下载】diffusers 中的特定模型下载&#xff0c;access token 使用方法总结【HuggingFace 下载中断】Git LFS 如何下载指定文件、单个文件夹&#xff1f;【HuggingFace 如何上传数据集】快速上传图片、文本等各种格式的数据 上文的方法因为是 https 协议&#xf…

CIM系统:智慧城市的数字基石

计算机集成制造系统&#xff08;CIM&#xff09;是智慧城市建设中的关键技术&#xff0c;它通过集成多种信息技术&#xff0c;为城市提供一个全面的数字化镜像。CIM系统不仅涉及建筑信息模型&#xff08;BIM&#xff09;、地理信息系统&#xff08;GIS&#xff09;、物联网&…

1024-过去一年的总结

目录 前言 (10月-24.01)故事的开始 &#xff08;2月-7月&#xff09;漫长的学习与探索 &#xff08;8月-现在&#xff09;低谷期 自我审视 前言 1024在即,就借此机会讲一讲过去一年的经历&#xff0c;也算是全方位总结一下自己 (10月-24.01)故事的开始 那就从去年大一入学…

前端优化:从Vue/React/Svelte的数组更新->渲染策略剖析数组大列表数据展示优化策略

在现代前端框架中&#xff0c;数组的渲染是一个重要的功能。不同的框架在处理数组的操作&#xff08;如新增、删除和更新&#xff09;时有不同的实现方式和优化手段。本文将对比 Vue、React 和 Svelte 在数组渲染方面的特点&#xff0c;并讨论其优缺点&#xff0c;特别是与直接…

【C++】STL——priority_queue优先级队列

目录 前言priority_queue的使用简单使用在OJ中的使用 priority_queue的模拟实现基本功能仿函数在这里插入图片描述 前言 上一节我们说了stack和queue这两种容器适配器&#xff0c;而priority_queue&#xff08;优先级队列&#xff09;同样也是属于容器适配器&#xff0c;它会优…

使用Python在Jupyter Notebook中显示Markdown文本

使用Python在Jupyter Notebook中显示Markdown文本 引言1. 导入必要的模块2. 定义一个函数来显示Markdown文本3. 使用print_md函数显示Markdown文本4. 总结 引言 作为一名Python初级程序员&#xff0c;你可能已经熟悉了Jupyter Notebook这个强大的工具。Jupyter Notebook不仅支…

【Fargo】9:模拟图片采集的内存泄漏std::bad_alloc

std::bad_alloc 崩溃。这样的内存分配会导致内存耗尽 is simulating an image of size 640x480 with 3 bytes per pixel, resulting in an allocation of approximately 921,600 bytes (or around 900 KB) for each image. The error you’re encountering (std::bad_alloc) ty…

Spring Boot中使用FlexyPool动态监控管理数据库连接池

在现代软件开发中&#xff0c;数据库连接管理是性能优化的关键一环。传统的固定大小连接池在面对突发流量或持续增长的数据访问需求时&#xff0c;往往显得力不从心。FlexyPool正是为了解决这一问题而诞生的创新解决方案。它不仅能够根据实际需求动态调整连接池大小&#xff0c…

【c++】左值右值

1. 普通类型的变量&#xff0c;因为有名字&#xff0c;可以取地址&#xff0c;都认为是左值。 2. const修饰的常量&#xff0c;不可修改&#xff0c;只读类型的&#xff0c;理论应该按照右值对待&#xff0c;但因为其可以取地址(如果只是const类型常量的定义&#xff0c;编译器…

Arduino 1.8 无法启动,闪屏过后,不出主界面

突然打不开了&#xff0c;闪屏过后&#xff0c;不出主界面&#xff0c;一直这样&#xff0c;任务栏有图标。 1. 使用调试版的arduino_debug.exe运行显示如下&#xff0c;也没有任何错误。 C:\Users\youuser>"C:\Program Files (x86)\Arduino\arduino_debug.exe"…