19-03 Adaptive AUTOSAR 架构概述(18)-核心类型

18 核心类型

核心类型定义了多个功能集合使用的通用类和功能,作为它们公共接口的一部分。定义核心类型的一个原理是包含在接口定义中经常使用的通用复杂数据类型。

18.1 错误处理

概述

对任何软件开发来说错误处理都是一个重要的话题。对于关键安全软件,它更重要,因为软件生命要依靠它。但是,当前的安全关键软件开发标准对构建工具链施加了很大的限制,特别是在c++异常方面。对于ASIL应用程序,使用c++异常通常是不可能的,因为ASIL认证的c++编译器缺乏对异常的支持。

Adaptive 平台引入了一个概念使错误处理没有C++异常,并且定义了大量的C++数据类型来辅助。

从应用程序开发者的角度,实现这个概念的核心类型是ara::core::ErrorCode和ara::core::Result.

错误码

ara::code::ErrorCode的一个实例表示软件内一个特定的错误条件。它类似于std::error_code,但是在很多方面都不相同。

一个错误码一直包含一个枚举类型(将类型擦除为整型)和一个对错误域的引用。枚举值描述一个特定的错误类型,错误域的音乐定义了错误应用的上下文。其它可选的成员是一个用户定义的信息字符串和一个厂家定义的额补充错误描述值。

在Adaptive 平台内部,每个功能集合定义了一个或多个错误域。比如,功能集合“Core Type”定义了错误域“Posix”,这个错误域包含了POSIX 1已经定义的错误码。它们相当于c++ 11标准中的std::errc。

结果

类ara::core::Result是一个打包类型,它包含了一个值或一个错误。因为模板特性,值和错误可以是任何一种类型。但是,错误类型默认为ara::core::ErrorCode,并希望在整个Adaptive平台保持。

因为错误类型有个默认值,所以ara::core::Result大部分的生命仅仅需要给值一个类型。比如 ara::core::Result<int> 包含一个int 或 ara::core::ErrorCode。

包含的值或错误可以通过成员函数Result::Value 或 Result::Error来访问。确保仅当结果实例分别包含一个值或一个错误时才调用这些访问函数是调用者的责任。比如Result::HasValue可以查询一个值或一个错误。没有成员函数抛出异常,因此可以在不支持C++异常的环境中使用。

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

将来和承诺

与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, 从Future中返回一个包含一个值或一个错误的对象ara::core::Result。

这两条调用会block直到这个值或错误通过异步调用方法可用。

18.2 高级数据类型

除了前面部分提到的AUTOSAR设计的类型,Adaptive平台也包含大量的通用数据类型。

部分这些类型已经包含在C++11标准中;但是,大部分相同行为的类型在ara::core命名空间重新定义。原因是std::types的内存分配行为对汽车来说不适用。因此,ara::core定义了他们自己的内存分配行为。

这种数据类型的例子是vector, map, 和string。

其它定义在ara::core中的类型已经被定义或建议给新的C++标准。Adaptive平台把他们包含进了ara::core命名空间,因为他们对于支持某些清单的构建是必须的,或因为它们被认为在API中非常有用。这种数据类型的例子是string_view, span, optional和variant。

18.3 原始数据类型

存在另外一个文档AUTOSAR_SWS_AdaptivePlatformTypes,它定义了可以用在服务接口描述中的原始类型。这个文档将来会考虑和顶到核心类型文档中。

18.4 全局初始化和关闭功能

下面的函数对Adaptive应用程序来说,初始化和反初始化对应的数据结构和AUTOSAR运行事件的线程是非常有用的:

* ara::core::Initialize

* ara::core::Deinitialize

ara::core::Initialize初始化应用程序的数据结构和AUTOSAR Adaptive运行时的线程。在此调用之前,不可能与ARA进行交互。这个调用必须在main()函数中。比如在保证静态内存初始化完成的地方。根据个人功能集合规范,调用应用程序需要提供额外的配置数据(比如日志要求的Application ID)或额外的初始化调用(比如在ara::com中启动FindService),然后才能对相应的功能集群进行其他API调用。这些调用必须在调用Initialize()之后。在静态初始化完成之前调用ARA API可能导致未定义的行为。在静态初始化完成之后但是在Initialize()之前调用会被功能集合实现拒绝并报告错误。如果没有定义报告的错误,会导致未定义的行为。

ara::core::Deinitialize破坏应用程序所有的数据结构和AUTOSAR Adaptive运行时的线程。调用必须在main()函数中,比如在保证静态初始化已经完成并且静态初始化数据析构还没有开始的地方。对ARA API的嗲用在ara::core::Deinitialize()之后但是在静态初始化数据析构之前会被拒绝并报告错误。如果没有定义错误,会导致未定义的行为。在静态初始化数据析构之后调用ARA API会导致未定义的行为。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355