AP Autosar平台设计 18 核心类型Core Types

13 篇文章 9 订阅

目录

18 核心类型Core Types

18.1错误处理

18.1.1概述

18.1.2错误代码ErrorCode

18.1.3结果Result

18.1.4 Future and Promise

18.2高级数据类型Advanced data types

18.3基本数据类型

18.4全局初始化和关闭功能


18 核心类型Core Types

核心类型定义了多个功能集群使用的公共类和功能,作为其公共接口的一部分。 定义核心类型的理由之一是包括接口定义中经常使用的常见复杂数据类型。

18.1错误处理

18.1.1概述

处理错误对于任何软件开发来说都是一个至关重要的主题。对于安全关键软件来说,它甚至更重要,因为生命可以依赖于它。然而,当前开发安全关键软件的标准对构建工具链施加了重大限制,特别是关于C++异常。对于ASIL应用程序,由于缺少ASIL认证的C++编译器的例外支持,通常使用C++异常是不可能的。

自适应平台引入了一种概念,它允许在没有C++异常的情况下进行错误处理,并定义了一些C++数据类型来帮助实现这一点。

从程序员的角度来看,实现这个概念的核心类型是ara::core::ErrorCode和ara::core::Result。

18.1.2错误代码ErrorCode

ara::core::ErrorCode的实例表示软件中的特定错误条件。它类似于std::error_code,但在重要方面与之不同。

ErrorCode始终包含枚举值(类型擦除type-erased为整数类型)和对错误域的引用。枚举值描述了错误的特定类型,错误域引用定义了该错误适用的环境。其他可选成员是用户定义的消息字符串和供应商定义的补充错误描述值。

在自适应平台中,每个功能集群定义一个或多个错误域。例如,功能集群“Core Types”定义了两个错误域“Core”和“Future”,其中包含不同错误条件集的错误代码。

18.1.3结果Result

类ara::core::Result是包含值或错误的包装器类型。由于其模板化性质,值和错误都可以是任何类型。但是,错误类型默认为ara::core::ErrorCode,预计此分配将在整个Adaptive平台中保留。

由于错误类型有一个默认值,大多数ara::core::Result声明只需要给出值的类型,例如,对于包含int或ara::core::ErrorCode的Result type,ara::core::Result<int>

可以通过成员函数访问包含的值和错误Result::Value or Result::Error调用者负责确保仅当Result instance实例分别包含值或错误时才调用这些访问函数。Result内容的类型,即值或错误,可以通过Result::HasValue查询。这些成员函数中没有一个抛出任何异常,因此可以在不支持C++异常的环境中使用。

除了上面描述的无异常工作流之外,类ara::core::Result 允许转换包含的 ara::core::ErrorCode 通过调用 ara::core::Result::ValueOrThrow 将对象转化为 C++ 异常。此调用按原样返回任何包含的值,但通过抛出相应的异常类型来处理包含的错误,异常类型自动派生自包含的 ara::core::ErrorCode 的内容。

18.1.4 Future and Promise

与ara::core::Result用作同步函数调用的通用返回类型的方式类似,ara::core::Future用作异步函数调用的通用返回类型。

ara::core::Future与std::Future密切相关,但已扩展为与ara::core::Result互操作。

与ara::core::Result类似,ara::core::Future是一个包含值或错误的类。可通过两种方式提取此内容:

1.通过调用ara::core::Future::get,它返回包含的值(如果存在),否则抛出异常

2.通过调用 ara::core::Future::GetResult,它返回一个 ara::core::Result 对象,其中包含来自 Future 的值或错误

这两个调用都将阻塞,直到异步函数调用提供了值或错误

18.2高级数据类型Advanced data types

除了上一节中提到的错误处理数据类型之外

AP还包含许多其他数据类型和辅助函数。

其中一些类型已经包含在C++11标准中;但是,行为几乎相同的类型在ara::core命名空间中重新定义。这是因为std::types的内存分配行为通常不适合汽车用途。因此,ara::core定义了它们自己的内存分配行为。

这类数据类型的示例有Vector、Map和String。

ara::core 中定义的其他类型已在较新的 C++ 标准中定义或提议,自适应平台将它们包含到ara::core命名空间中,因为它们对于支持Manifest的某些构造是必要的,或者因为它们被认为在API中非常有用。

此类数据类型的示例有StringView、Span、Optional和Variant。

18.3基本数据类型

存在另一个文档AUTOSAR_SWS_AdaptivePlatformTypes,它定义了可在ServiceInterface描述中使用的基本类型。本文件可能被视为将来与Core Types文件合并。

18.4全局初始化和关闭功能

以下函数可用于初始化和反初始化自适应应用程序AUTOSAR运行时的各个数据结构和线程:

Øara::core::Initialize

Øara::core::Deinitialize

ara::core::Initialize 初始化 AUTOSAR Adaptive Runtime for Applications 的数据结构和线程。在此调用之前,不可能与 ARA 进行交互。此调用必须在 main() 内部进行,即在保证静态内存初始化已完成的地方。根据各个功能集群规范,调用应用程序可能必须提供

其他配置数据(例如,为日志记录设置应用程序 ID)或进行其他初始化调用(例如,在 ara::com 中启动 FindService),然后才能对相应功能集群进行其他 API 调用。此类调用必须在调用 Initialize() 之后进行。在静态初始化完成之前调用 ARA API 会导致未定义的行为。静态初始化后进行的调用具有已完成但在调用 Initialize() 之前将被功能集群实现拒绝并出现错误,或者,如果未定义要报告的错误,则会导致未定义的行为。

Ara::core::Deinitialize销毁应用程序AUTOSAR自适应运行时的所有数据结构和线程。此呼叫后,无法与ARA进行交互。此调用必须在main()内部进行,即在保证静态初始化已完成且静态初始化数据尚未开始销毁的位置进行。在调用ARA::core::Deinitialize()之后但在销毁静态初始化数据之前对ARA API进行的调用将被错误拒绝,或者,如果未定义错误,将导致未定义的行为。销毁静态初始化数据后对ARA API的调用将导致未定义的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>