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