Adaptive Platform AUTOSAR(AP)平台设计(17)——Core Types

Hello!大家好!

本篇是AP AUTOSAR平台设计(17)——Core Types

AP和CP相关资料获取和工具咨询、更多精彩内容欢迎订阅微信公众号“搞一下汽车电子”

整理不易,如果觉得不错,点赞分享支持一下吧~

邮箱:[email protected]

微信:shactiontech


Core Types定义了多个功能集群作为其公共 interface 的一部分使用的通用类和功能。定义Core Types的理由之一是包括 Interface 定义中经常使用的常见复杂数据类型。


1.错误处理

概述

错误处理对于任何软件开发都是至关重要的主题。对于安全性至关重要的软件,它尤为重要,因为生命可以依靠它。但是,当前用于开发safety至关重要的软件的标准对构建工具链施加了重大限制,尤其是在C ++异常方面。对于ASIL应用程序,由于缺少ASIL认证的C ++编译器的异常支持,因此通常无法使用C ++异常。

Adaptive Platform引入了一种概念,该概念支持在没有C ++异常的情况下进行错误处理,并定义了许多C ++数据类型来帮助实现这一点。

从应用程序程序员的角度来看,实现此概念的主要类型是ara :: core :: ErrorCode和ara :: core :: Result。

ErrorCode

ara :: core :: ErrorCode的实例表示软件中的特定错误情况。它与std :: error_code相似,但在重要方面有所不同。

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

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

Result

类ara :: core :: Result是包装器类型,它包含value或error。由于其模板性质,value和error都可以是任何类型。但是,error类型默认为ara :: core :: ErrorCode,并且预计该分配会在整个Adaptive Platform中保留。

由于error类型具有默认值,因此大多数ara :: core :: Result声明仅需要提供值的类型,例如ara :: core :: Result <int>表示包含int或ara :: core :: ErrorCode的Result类型。

可以通过成员函数Result :: Value或Result :: Error访问所包含的value或error。调用者有责任确保仅在Result实例分别包含value或error的情况下调用这些访问函数。Result :: HasValue可以查询结果的内容类型,即value或error。这些成员函数均未引发任何异常,因此可以在不支持C ++异常的环境中使用。

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

Future and Promise

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

ara :: core :: Future与std :: future紧密相似,但已扩展为可与ara :: core :: Result互操作。

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

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

• 通过调用ara :: core :: Future :: GetResult,它返回一个ara :: core :: Result对象,其中包含Future的value或error

这两个调用将阻塞,直到异步函数调用使value或error可用为止。


2.高级数据类型

除了上一节中提到的错误处理数据类型外,Adaptive Platform还包含许多其他数据类型和辅助函数。

其中一些类型已经包含在C ++ 11标准中。但是,具有几乎相同行为的类型将在ara :: core命名空间中重新定义。这样做的原因是std ::类型的内存分配行为通常不适合汽车用途。因此,ara :: core定义了自己的内存分配行为。此类数据类型的示例是Vector,Map和String。

ara :: core中定义的其他类型已经在较新的C++标准中定义或提出,并且Adaptive Platform将它们包括在ara :: core命名空间中,因为它们对于支持Manifest的某些构造是必需的,或者因为它们是 在API中使用非常有用。此类数据类型的示例包括StringView,Span,Optional和Variant。


3.全局初始化和关闭功能

下列功能可用于初始化和取消初始化自适应应用程序AUTOSAR运行时的相应数据结构和线程:

• ara::core::Initialize

• ara::core::Deinitialize

ara :: core :: Initialize初始化应用程序AUTOSAR自适应运行时的数据结构和线程。在此呼叫之前,无法与ARA进行任何交互。此调用必须在main() 内部进行,即在保证静态内存初始化已完成的地方。

取决于各个功能集群规范,在其他API调用之前,调用应用程序可能必须提供其他配置数据(例如,设置用于记录的应用程序ID)或进行其他初始化调用(例如,在ara :: com中启动FindService)。可以建立相应的功能集群。此类调用必须在调用Initialize() 之后进行。在静态初始化完成之前对ARA API的调用会导致未定义的行为。静态初始化完成后但在调用Initialize() 之前进行的调用将被功能集群实现拒绝,并出现错误;或者,如果未定义要报告的错误,则会导致未定义的行为。

ara :: core :: Deinitialize销毁应用程序AUTOSAR自适应运行时的所有数据结构和线程。通话后,无法与ARA进行任何互动。此调用必须在main() 内部进行,即,在保证静态初始化已完成且尚未开始破坏静态初始化数据的地方。在调用ara :: core :: Deinitialize() 之后但销毁静态初始化数据之前,对ARA API的调用将被拒绝,并显示错误消息;如果未定义错误,则导致未定义行为。销毁静态初始化的数据后,对ARA API的调用将导致未定义的行为。

原创文章 32 获赞 107 访问量 7532

猜你喜欢

转载自blog.csdn.net/DJAction/article/details/105508920