19-03 Adaptive AUTOSAR 架構(gòu)概述(18)-核心類型

18 核心類型

核心類型定義了多個(gè)功能集合使用的通用類和功能,作為它們公共接口的一部分。定義核心類型的一個(gè)原理是包含在接口定義中經(jīng)常使用的通用復(fù)雜數(shù)據(jù)類型蛙讥。

18.1 錯(cuò)誤處理

概述

對(duì)任何軟件開發(fā)來說錯(cuò)誤處理都是一個(gè)重要的話題坎藐。對(duì)于關(guān)鍵安全軟件,它更重要绰垂,因?yàn)檐浖揽克易唷5牵?dāng)前的安全關(guān)鍵軟件開發(fā)標(biāo)準(zhǔn)對(duì)構(gòu)建工具鏈?zhǔn)┘恿撕艽蟮南拗凭⒆埃貏e是在c++異常方面胧沫。對(duì)于ASIL應(yīng)用程序,使用c++異常通常是不可能的占业,因?yàn)锳SIL認(rèn)證的c++編譯器缺乏對(duì)異常的支持绒怨。

Adaptive 平臺(tái)引入了一個(gè)概念使錯(cuò)誤處理沒有C++異常,并且定義了大量的C++數(shù)據(jù)類型來輔助谦疾。

從應(yīng)用程序開發(fā)者的角度南蹂,實(shí)現(xiàn)這個(gè)概念的核心類型是ara::core::ErrorCode和ara::core::Result.

錯(cuò)誤碼

ara::code::ErrorCode的一個(gè)實(shí)例表示軟件內(nèi)一個(gè)特定的錯(cuò)誤條件。它類似于std::error_code念恍,但是在很多方面都不相同六剥。

一個(gè)錯(cuò)誤碼一直包含一個(gè)枚舉類型(將類型擦除為整型)和一個(gè)對(duì)錯(cuò)誤域的引用。枚舉值描述一個(gè)特定的錯(cuò)誤類型峰伙,錯(cuò)誤域的音樂定義了錯(cuò)誤應(yīng)用的上下文疗疟。其它可選的成員是一個(gè)用戶定義的信息字符串和一個(gè)廠家定義的額補(bǔ)充錯(cuò)誤描述值。

在Adaptive 平臺(tái)內(nèi)部瞳氓,每個(gè)功能集合定義了一個(gè)或多個(gè)錯(cuò)誤域策彤。比如,功能集合“Core Type”定義了錯(cuò)誤域“Posix”,這個(gè)錯(cuò)誤域包含了POSIX 1已經(jīng)定義的錯(cuò)誤碼店诗。它們相當(dāng)于c++ 11標(biāo)準(zhǔn)中的std::errc裹刮。

結(jié)果

類ara::core::Result是一個(gè)打包類型,它包含了一個(gè)值或一個(gè)錯(cuò)誤庞瘸。因?yàn)槟0逄匦耘跗岛湾e(cuò)誤可以是任何一種類型。但是恕洲,錯(cuò)誤類型默認(rèn)為ara::core::ErrorCode塔橡,并希望在整個(gè)Adaptive平臺(tái)保持。

因?yàn)殄e(cuò)誤類型有個(gè)默認(rèn)值霜第,所以ara::core::Result大部分的生命僅僅需要給值一個(gè)類型葛家。比如 ara::core::Result<int> 包含一個(gè)int 或 ara::core::ErrorCode。

包含的值或錯(cuò)誤可以通過成員函數(shù)Result::Value 或 Result::Error來訪問泌类。確保僅當(dāng)結(jié)果實(shí)例分別包含一個(gè)值或一個(gè)錯(cuò)誤時(shí)才調(diào)用這些訪問函數(shù)是調(diào)用者的責(zé)任癞谒。比如Result::HasValue可以查詢一個(gè)值或一個(gè)錯(cuò)誤。沒有成員函數(shù)拋出異常刃榨,因此可以在不支持C++異常的環(huán)境中使用弹砚。

除了上面描述的無異常工作流之外,類ara::core::Result允許通過調(diào)用ara::core::Result::ValueOrThrow將包含ara::core::ErrorCode轉(zhuǎn)換成C++異常枢希。此調(diào)用按原樣返回任何包含的值桌吃,但是通過拋出相應(yīng)的異常類型來處理包含的錯(cuò)誤,該異常類型自動(dòng)派生自包含的ara::core::ErrorCode的內(nèi)容苞轿。

將來和承諾

與ara::core::Result用作同步函數(shù)調(diào)用的廣義返回類型類似茅诱,ara::core::Future用作異步函數(shù)調(diào)用的廣義返回類型。

ara::core::Future與std:: Future非常相似搬卒,但是已經(jīng)擴(kuò)展到與ara::core::Result互操作瑟俭。

和ara::core::Result類似,ara::core::Future是包含一個(gè)值或一個(gè)錯(cuò)誤的類契邀。該內(nèi)容可以通過兩種方式提取:

1. 通過調(diào)用ara::core::Future::get摆寄,如果存在就返回一個(gè)包含的值。如果沒有坯门,就拋出異常

2. 通過調(diào)用ara::core::Future::GetResult微饥, 從Future中返回一個(gè)包含一個(gè)值或一個(gè)錯(cuò)誤的對(duì)象ara::core::Result。

這兩條調(diào)用會(huì)block直到這個(gè)值或錯(cuò)誤通過異步調(diào)用方法可用古戴。

18.2 高級(jí)數(shù)據(jù)類型

除了前面部分提到的AUTOSAR設(shè)計(jì)的類型欠橘,Adaptive平臺(tái)也包含大量的通用數(shù)據(jù)類型。

部分這些類型已經(jīng)包含在C++11標(biāo)準(zhǔn)中允瞧;但是简软,大部分相同行為的類型在ara::core命名空間重新定義。原因是std::types的內(nèi)存分配行為對(duì)汽車來說不適用述暂。因此痹升,ara::core定義了他們自己的內(nèi)存分配行為。

這種數(shù)據(jù)類型的例子是vector, map, 和string畦韭。

其它定義在ara::core中的類型已經(jīng)被定義或建議給新的C++標(biāo)準(zhǔn)疼蛾。Adaptive平臺(tái)把他們包含進(jìn)了ara::core命名空間,因?yàn)樗麄儗?duì)于支持某些清單的構(gòu)建是必須的艺配,或因?yàn)樗鼈儽徽J(rèn)為在API中非常有用察郁。這種數(shù)據(jù)類型的例子是string_view, span, optional和variant。

18.3 原始數(shù)據(jù)類型

存在另外一個(gè)文檔AUTOSAR_SWS_AdaptivePlatformTypes转唉,它定義了可以用在服務(wù)接口描述中的原始類型皮钠。這個(gè)文檔將來會(huì)考慮和頂?shù)胶诵念愋臀臋n中。

18.4 全局初始化和關(guān)閉功能

下面的函數(shù)對(duì)Adaptive應(yīng)用程序來說赠法,初始化和反初始化對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)和AUTOSAR運(yùn)行事件的線程是非常有用的:

* ara::core::Initialize

* ara::core::Deinitialize

ara::core::Initialize初始化應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)和AUTOSAR Adaptive運(yùn)行時(shí)的線程麦轰。在此調(diào)用之前,不可能與ARA進(jìn)行交互砖织。這個(gè)調(diào)用必須在main()函數(shù)中款侵。比如在保證靜態(tài)內(nèi)存初始化完成的地方。根據(jù)個(gè)人功能集合規(guī)范侧纯,調(diào)用應(yīng)用程序需要提供額外的配置數(shù)據(jù)(比如日志要求的Application ID)或額外的初始化調(diào)用(比如在ara::com中啟動(dòng)FindService)新锈,然后才能對(duì)相應(yīng)的功能集群進(jìn)行其他API調(diào)用。這些調(diào)用必須在調(diào)用Initialize()之后眶熬。在靜態(tài)初始化完成之前調(diào)用ARA API可能導(dǎo)致未定義的行為妹笆。在靜態(tài)初始化完成之后但是在Initialize()之前調(diào)用會(huì)被功能集合實(shí)現(xiàn)拒絕并報(bào)告錯(cuò)誤。如果沒有定義報(bào)告的錯(cuò)誤聋涨,會(huì)導(dǎo)致未定義的行為晾浴。

ara::core::Deinitialize破壞應(yīng)用程序所有的數(shù)據(jù)結(jié)構(gòu)和AUTOSAR Adaptive運(yùn)行時(shí)的線程。調(diào)用必須在main()函數(shù)中牍白,比如在保證靜態(tài)初始化已經(jīng)完成并且靜態(tài)初始化數(shù)據(jù)析構(gòu)還沒有開始的地方脊凰。對(duì)ARA API的嗲用在ara::core::Deinitialize()之后但是在靜態(tài)初始化數(shù)據(jù)析構(gòu)之前會(huì)被拒絕并報(bào)告錯(cuò)誤。如果沒有定義錯(cuò)誤茂腥,會(huì)導(dǎo)致未定義的行為狸涌。在靜態(tài)初始化數(shù)據(jù)析構(gòu)之后調(diào)用ARA API會(huì)導(dǎo)致未定義的行為。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末最岗,一起剝皮案震驚了整個(gè)濱河市帕胆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌般渡,老刑警劉巖懒豹,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芙盘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡脸秽,警方通過查閱死者的電腦和手機(jī)儒老,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來记餐,“玉大人驮樊,你說我怎么就攤上這事∑停” “怎么了囚衔?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雕沿。 經(jīng)常有香客問我练湿,道長,這世上最難降的妖魔是什么审轮? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任鞠鲜,我火速辦了婚禮,結(jié)果婚禮上断国,老公的妹妹穿的比我還像新娘贤姆。我一直安慰自己,他們只是感情好稳衬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布霞捡。 她就那樣靜靜地躺著,像睡著了一般薄疚。 火紅的嫁衣襯著肌膚如雪碧信。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天街夭,我揣著相機(jī)與錄音砰碴,去河邊找鬼。 笑死板丽,一個(gè)胖子當(dāng)著我的面吹牛呈枉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埃碱,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猖辫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了砚殿?” 一聲冷哼從身側(cè)響起啃憎,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似炎,沒想到半個(gè)月后辛萍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯姊,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贩毕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挠轴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耳幢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欧啤,到底是詐尸還是另有隱情睛藻,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布邢隧,位于F島的核電站店印,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏倒慧。R本人自食惡果不足惜按摘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纫谅。 院中可真熱鬧炫贤,春花似錦、人聲如沸付秕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽询吴。三九已至掠河,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猛计,已是汗流浹背唠摹。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奉瘤,地道東北人勾拉。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像盗温,于是被迫代替她去往敵國和親望艺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355