RTE是什么
AUTOSAR RTE(Run Time Environment)實(shí)現(xiàn)了AUTOSAR系統(tǒng)中的虛擬功能總線(VFB),提供了SWC(Software Component)之間的訪問(wèn)接口和SWC對(duì)于BSW資源的訪問(wèn)接口。RTE為SWC中的Runnable提供與其他SWC或者BSW模塊通信的接口,RTE將Runnable映射到OS Task中,并且管理Runnable的觸發(fā)機(jī)制,因此RTE功能主要可以分為兩個(gè)部分:
- SWC間的通信
- SWC的調(diào)度
簡(jiǎn)化的AUTOSAR架構(gòu)圖如下:
RTE的用途或應(yīng)用
-
實(shí)現(xiàn)了虛擬功能總線,連接ECU內(nèi)外部SWC的通信
-
實(shí)現(xiàn)了SWC與BSW模塊之間通信的路徑,使用ports和interfaces
-
依據(jù)配置的不同的RTE Events觸發(fā)SWC中的多個(gè)Runnables
-
在配置期間包括來(lái)自任何項(xiàng)目的任何SWC,并按預(yù)期執(zhí)行操作以實(shí)現(xiàn)AUTOSAR的SWC重用能力和可移植性特性
-
支持SWC的多實(shí)例化
-
由于RTE處理OS任務(wù)中Runnables的執(zhí)行,實(shí)現(xiàn)了一個(gè)激活偏移量,在時(shí)間觸發(fā)的可運(yùn)行對(duì)象映射到同一OS任務(wù)中的情況下用于優(yōu)化CPU負(fù)載、內(nèi)存等。因?yàn)闀r(shí)間觸發(fā)的變量需要在配置的時(shí)間執(zhí)行,并且通過(guò)重疊避免可運(yùn)行的沖突,RTE使用激活偏移量。RTE通過(guò)計(jì)算任務(wù)的最大周期來(lái)處理這個(gè)問(wèn)題,這是所有可運(yùn)行的最大公約數(shù)(GCD),它假設(shè)任何可運(yùn)行的最大執(zhí)行周期都低于GCD
-
RTE還通知Runnables在較低層發(fā)生的任何中斷(如果已配置),但這并不意味著Runnables將在ISR中執(zhí)行。Runnables是SWC的子集,SWC完全獨(dú)立于較低層
-
RTE在同一個(gè)SWC的Runnables之間共享變量時(shí),或者分區(qū)間SWC或分區(qū)內(nèi)SWC,甚至在不同ECU的SWC之間的通信時(shí),必須保證數(shù)據(jù)的一致性。
-
SWC之間的通信(在Sender-receiver通信中)不僅限于點(diǎn)對(duì)點(diǎn)通信,還包括1:N(一個(gè)SWC與多個(gè)SWC通信)或N:1(多個(gè)SWC與一個(gè)SWC通信)組合。如果發(fā)送者同時(shí)向一個(gè)接收者發(fā)送數(shù)據(jù),RTE會(huì)注意防止任何沖突,反之亦然
-
如果發(fā)送方請(qǐng)求TransmissionAcknowledgementRequest,RTE通知發(fā)送方信號(hào)傳輸成功。此通知不保證接收器已成功接收到信號(hào)。
RTE通信
通信范例
RTE為SWC實(shí)例之間的通信提供不同的通信范例:
- sender-receiver(信號(hào)傳遞)
- client-server(函數(shù)調(diào)用)
- mode switch
- NvBlockSwComponentType交互
通信模式
對(duì)于sender-receiver通信,RTE支持2種模式
- Explicit——調(diào)用顯示RTE API收發(fā)數(shù)據(jù)單元
- Implicit——RTE在runnable被調(diào)用前自動(dòng)讀取指定數(shù)據(jù)集單元,在runnable被終止后自動(dòng)寫(xiě)數(shù)據(jù)集單元。隱式指的是runnable不會(huì)主動(dòng)發(fā)起數(shù)據(jù)的接收或傳輸
通信多樣性
除了支持點(diǎn)對(duì)點(diǎn)的通信,RTE支持多個(gè)providers或者requires的連接
-
當(dāng)使用sender-receiver通信時(shí),RTE支持1:N(single sender with multiple receivers)和N:1(multiple senders and a single receiver)的通信,部分N:1的通信有限制。
多個(gè)sender或者receiver的執(zhí)行不由RTE來(lái)協(xié)調(diào)。這意味著不同軟件組件的操作是獨(dú)立的,RTE不能確保不同的發(fā)送方同時(shí)傳輸數(shù)據(jù),不確保所有接收者同時(shí)讀取數(shù)據(jù)或接收事件。
-
當(dāng)使用client-server通信時(shí),RTE支持N:1(多個(gè)clients和單個(gè)server)通信,RTE不支持1:N(單個(gè)client和多個(gè)servers)的通信。
RTE的生成
RTE的生成是任何基于AUTOSAR的項(xiàng)目中最重要和最棘手的一步。RTE生成的結(jié)果是各種文件,但我們只考慮兩個(gè)重要的文件:1. Rte.c 文件,2. Rte.h 文件。這是最常見(jiàn)的RTE生成結(jié)果,但一些集成商也更喜歡為每個(gè)SWC生成單獨(dú)的RTE文件(.c 和 .h),這些文件進(jìn)一步包含在主RTE文件中,只是為了便于管理項(xiàng)目的RTE文件,這樣的生成選項(xiàng)可能因AUTOSAR GUI工具而異。RTE生成器可以是單獨(dú)的工具,也可以是完全取決于您使用的工具供應(yīng)商的集成工具。例如,在Vector DaVinci的情況下,DaVinci developer用于SWC、Runnables、IDT 創(chuàng)建等,而DaVinci configurator用于配置BSW和生成RTE。在任何基于AUTOSAR的系統(tǒng)中,RTE是為每個(gè)ECU單獨(dú)生成的,因?yàn)槊總€(gè)ECU的SWC可能有自己獨(dú)特的要求,因此RTE是為滿(mǎn)足這些要求而定制的。
image-20220610105235688
上圖給出了關(guān)于SWC和RTE生成器軟件的RTE生成步驟。讓我們?cè)敿?xì)了解每個(gè)步驟:
- 收集可用SWC實(shí)現(xiàn) 此步驟包括收集SWC描述文件(如果打算重用舊SWC)及其各自的Composition SWCs并進(jìn)一步使用它們。或者我們也可以創(chuàng)建新的SWC實(shí)現(xiàn)并將其用于進(jìn)一步的步驟。
- 配置系統(tǒng) 本步驟結(jié)合了舊步驟中的SWC,并配置了系統(tǒng)(整車(chē)ECU網(wǎng)絡(luò)),該系統(tǒng)具有不同ECU和其他系統(tǒng)約束的不同組成SWC。在此步驟中,所有SWC都映射到各自的ECU。
- 系統(tǒng)配置說(shuō)明 arxml文件,其中包含整個(gè)系統(tǒng)(車(chē)輛)的ECU的詳細(xì)信息,該文件在系統(tǒng)配置后生成。
- 提取ECU特定信息 提取單個(gè)ECU的SWC描述和其他詳細(xì)信息,不同于包含車(chē)輛中所有ECU信息的系統(tǒng)配置描述文件。
- 生成ECU配置 此步驟涉及配置RTE下層BSW中模塊比如COM Service等模塊的配置,這一步生成的也是一個(gè)arxml文件其包含所有ECU的信息,比如BSW的配置,SWC的配置等。
- 生成RTE 此步驟中,所有Runnables映射到操作系統(tǒng)任務(wù),所有connetions連接到實(shí)際的信號(hào)。此步驟的輸出為Rte.c和Rte.h文件,大致可以稱(chēng)為AUTOSAR的RTE層。此步驟還生成BSWMD(基本軟件模塊描述)文件,其中包含RTE不同功能的信息。
- 編譯RTE 顧名思義,在這一步中,將編譯RTE文件,并生成目標(biāo)文件,然后將這些文件與其他已編譯的BSW和SWC文件鏈接,以生成可刷寫(xiě)到MCU的可執(zhí)行文件。
對(duì)于系統(tǒng)的每個(gè)ECU,都會(huì)重復(fù)以上步驟。除了RTE文件外,還會(huì)為每個(gè)SWC生成SWC文件(.h和.c),一些軟件還會(huì)在SWC.c文件中生成可運(yùn)行的框架,在SWC.h文件中生成函數(shù)原型。所有RTE文件均按照[MISRA]生成(https://en.wikipedia.org/wiki/MISRA_C)-C標(biāo)準(zhǔn),雖然允許一些MISRA*違規(guī)行為,但此類(lèi)情況記錄在評(píng)論中。RTE源文件具有應(yīng)用程序和其他層所需的RTE調(diào)用,RTE頭文件具有這些調(diào)用的原型。
由于AUTOSAR的主要目標(biāo)是SWC的“重用能力”,因此RTE支持不同AUTOSAR版本的SWC兼容性,前提是SWC在其源文件中可用,而不是在目標(biāo)代碼中可用。SWC的兼容性和重用能力不僅限于AUTOSAR版本,還包括工具供應(yīng)商的獨(dú)立性,即可以使用來(lái)自不同工具供應(yīng)商的SWC,前提是其源代碼可用。
RTE API
RTE提供多種API以便SWC使用從其他SWC或者低層訪問(wèn)數(shù)據(jù)。RTE APIs可以簡(jiǎn)單的根據(jù)任何函數(shù)的Rte_prefix識(shí)別,通常分為2種類(lèi)型:
- Direct API:在需要高效(零運(yùn)行時(shí)開(kāi)銷(xiāo))調(diào)用時(shí)使用。這些API是為每個(gè)端口生成的,應(yīng)用程序可以通過(guò)在Runnable中調(diào)用API名稱(chēng)直接使用它。在映射API時(shí),可以針對(duì)SWC優(yōu)化此類(lèi)API。通常,Direct API實(shí)現(xiàn)為宏。因此,不可能獲得RTE API的地址來(lái)與C中的函數(shù)指針一起使用。
- Indirect API:使用端口句柄間接調(diào)用API。這種形式效率較低(間接尋址無(wú)法優(yōu)化),但支持一種可能更方便的不同編程風(fēng)格。
直接和間接API調(diào)用都將生成相同的結(jié)果,只是調(diào)用方式不同。在SWC中,我們可以使用間接或直接API實(shí)現(xiàn)。
RTE生成的文件關(guān)系
在RTE生成之后,RTE生成器工具會(huì)生成許多文件,其中的頭文件與其他文件有關(guān)系,即這些文件被#included到不同的文件中。這些文件以及它們與其他文件的關(guān)系如下:
- Rte.h:這個(gè)文件定義了不需要為每個(gè)ECU生成的固定元素,因?yàn)檫@個(gè)RTE生成器軟件不會(huì)一次又一次地生成這個(gè)文件。但是,如果需要,我們可以定制此文件以滿(mǎn)足我們的應(yīng)用程序。該文件包括Std_Types.h文件。
- Std_Types.h:該文件是標(biāo)準(zhǔn)的AUTOSAR文件,它定義了基本數(shù)據(jù)類(lèi)型,如無(wú)符號(hào)和有符號(hào)整數(shù)的平臺(tái)特定實(shí)現(xiàn),并提供了訪問(wèn)編譯器抽象的方法。
- Rte_Main.h:這是生命周期頭文件,其中包含RTE生命周期API的函數(shù)原型,如Rte_Start和Rte_Stop 。有些軟件還增加了更多的生命周期API,用于RTE內(nèi)存的初始化等。這個(gè)文件包括Rte.h文件。
- Rte.h:這是特定于應(yīng)用程序的RTE頭文件,因?yàn)槊Q(chēng)說(shuō)明文件名的前綴始終是Rte_,后綴是與此RTE應(yīng)用程序文件關(guān)聯(lián)的 SWC 名稱(chēng)。該文件包含與 SWC 相關(guān)的 SWC 中使用的RTE API的函數(shù)原型、數(shù)據(jù)結(jié)構(gòu)和Runnable的函數(shù)原型。該文件包括Rte_Type.h和Rte_DataHandle.h 文件
- Rte_Type.h:此文件包含從在SWC配置期間配置的實(shí)現(xiàn)數(shù)據(jù)類(lèi)型派生的RTE特定類(lèi)型聲明。此文件還包含對(duì)RTE API有用的AUTOSAR數(shù)據(jù)類(lèi)型。該文件包括 Rte.h 文件。
- Rte_DataHandleType.h:此文件包含SWC數(shù)據(jù)結(jié)構(gòu)所需的數(shù)據(jù)句柄類(lèi)型聲明。該文件不包含任何會(huì)占用內(nèi)存的符號(hào)。
- Rte__Type.h:這也稱(chēng)為應(yīng)用程序類(lèi)型頭文件,它包含與應(yīng)用程序相關(guān)的常量,如SWC中使用的范圍值或枚舉值。該文件包括Rte_Type.h文件。
轉(zhuǎn)自汽車(chē)電子與軟件