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