AUTOSAR Transformer 詳解
目錄
- 1. Transformer概述
- 1.1 Transformer的作用
- 1.2 Transformer的基本特性
- 2. Transformer架構
- 2.1 整體架構
- 2.2 類層次結構
- 3. Transformer類型
- 3.1 SOME/IP Transformer
- 3.2 COM Based Transformer
- 4. Transformer處理流程
- 4.1 SOME/IP Transformer處理流程
- 5. 總結
1. Transformer概述
1.1 Transformer的作用
Transformer是AUTOSAR中基礎軟件服務層的重要組件,主要作用是對數據進行轉換處理。根據SRS_Xfrm_00001的要求,Transformer負責接收來自RTE(運行時環境)的數據,對數據進行處理后,將結果返回給RTE。Transformer可以執行以下兩類主要操作:
- 序列化/線性化數據:將結構化數據轉換為線性形式
- 轉換數據:修改或擴展線性數據,例如添加校驗和
Transformer作為系統服務集群中的BSW(基礎軟件)模塊,為RTE提供服務。它們由RTE調用執行,并可以保持內部狀態,但也可以工作為無狀態組件。
1.2 Transformer的基本特性
根據AUTOSAR SRS對Transformer的規范要求,所有Transformer應具備以下基本特性:
- 固定接口:提供標準化接口供RTE調用(SRS_Xfrm_00002)
- 緩沖機制:支持就地(in-place)和復制(copy)緩沖機制(SRS_Xfrm_00003)
- 錯誤處理:支持將錯誤返回給RTE(SRS_Xfrm_00004)
- 數據兼容性:能夠處理比預期更多的數據(SRS_Xfrm_00005)
- 并發執行:支持并發執行(SRS_Xfrm_00006)
- 數據提取:反序列化轉換器支持提取數據子集(SRS_Xfrm_00007)
- 輸出格式規范:明確指定其輸出數據格式(SRS_Xfrm_00008)
- 類別歸屬:每個Transformer屬于特定的Transformer類(SRS_Xfrm_00011)
此外,Transformer可以組成轉換器鏈,由RTE按照指定順序調用鏈中的轉換器。這種配置在系統模板中完成,轉換器鏈的最大長度限制為255個轉換器。
2. Transformer架構
2.1 整體架構
下圖展示了AUTOSAR中Transformer的整體架構,包括其在AUTOSAR分層架構中的位置以及與其他組件的關系:
從圖中可以看出,Transformer位于AUTOSAR架構的基礎軟件服務層,主要負責連接應用層的軟件組件與通信服務層的各種通信模塊。架構的關鍵組成部分包括:
- 應用層:包含軟件組件(SWC),是數據的最終來源和目的地
- RTE層:包含運行時環境和Transformer管理器,負責協調Transformer的執行
- 基礎軟件服務層:
- Transformer類:包括COM Based Transformer、SOME/IP Transformer和其他類型的Transformer
- 通信服務:包括COM模塊和SOME/IP堆棧等,負責底層通信實現
Transformer管理器是RTE的一部分,負責按配置順序調用Transformer鏈、處理錯誤返回以及協調并發執行。所有Transformer都提供標準化接口,支持就地和復制緩沖、錯誤處理及并發執行。
2.2 類層次結構
下圖展示了AUTOSAR中Transformer的類層次結構:
該圖描述了Transformer的基類和派生類的層次關系:
-
Transformer基類:定義了所有Transformer必須實現的接口和功能要求(SRS_Xfrm_00001 - SRS_Xfrm_00011),包括:
- 提供固定接口
- 執行轉換
- 支持錯誤處理
- 支持in-place/copy緩沖
- 處理超長數據
- 支持并發執行
- 指定輸出格式
- 提供抽象錯誤集合
-
派生類:
- SOME/IP Transformer:提供SOME/IP協議相關功能(SRS_Xfrm_00101 - SRS_Xfrm_00106)
- COM Based Transformer:提供COM模塊相關功能(SRS_Xfrm_00201 - SRS_Xfrm_00202)
- 其他Transformer類型:提供其他特定功能
根據SRS_Xfrm_00009和SRS_Xfrm_00011的要求,AUTOSAR中存在固定的Transformer類集合,每個Transformer必須屬于特定的Transformer類,同時每個類提供一組固定的抽象錯誤集合。
3. Transformer類型
3.1 SOME/IP Transformer
SOME/IP Transformer(可擴展面向服務中間件/IP)是一種專門處理SOME/IP協議通信的轉換器。根據SRS_Xfrm_00101到SRS_Xfrm_00106的要求,SOME/IP Transformer提供以下功能:
- 數據序列化:將原子和結構化數據元素序列化為線性數組(SRS_Xfrm_00101)
- 通信協議:定義ECU間客戶端/服務器通信的協議(SRS_Xfrm_00102)
- 異常通知:支持應用程序的異常通知(SRS_Xfrm_00103)
- 錯誤處理:支持服務器端客戶端/服務器通信的自主錯誤反應(SRS_Xfrm_00105)
- 擴展數據支持:支持具有標記成員/參數的可擴展數據結構和方法的序列化(SRS_Xfrm_00106)
SOME/IP Transformer的創建動機是為了滿足嵌入式環境中的資源消耗需求,同時兼容各種用例和通信伙伴,可以在不同的操作系統(AUTOSAR、GENIVI、OSEK)上實現,甚至可以在沒有操作系統的嵌入式設備上使用。
代碼示例:SOME/IP Transformer接口定義
/* SOME/IP Transformer接口示例 */
typedef struct {uint16 ServiceId; /* 服務標識符 */uint16 MethodId; /* 方法標識符 */uint8 InterfaceVersion; /* 接口版本 */boolean ExtensibleFormat; /* 是否使用可擴展格式 */
} SomeIp_ServiceConfigType;/* SOME/IP Transformer序列化函數 */
Std_ReturnType SomeIp_Serialize(const void* dataPtr, /* 輸入數據指針 */uint32 dataSize, /* 輸入數據大小 */uint8* targetBufferPtr, /* 目標緩沖區指針 */uint32* targetBufferSizePtr, /* 目標緩沖區大小指針 */const SomeIp_ServiceConfigType* configPtr /* 服務配置 */
);/* SOME/IP Transformer反序列化函數 */
Std_ReturnType SomeIp_Deserialize(const uint8* dataPtr, /* 輸入數據指針 */uint32 dataSize, /* 輸入數據大小 */void* targetStructPtr, /* 目標結構體指針 */uint32* targetSizePtr, /* 目標大小指針 */const SomeIp_ServiceConfigType* configPtr /* 服務配置 */
);/* SOME/IP Transformer錯誤處理函數 */
Std_ReturnType SomeIp_HandleError(uint8 errorId, /* 錯誤標識符 */uint8* responseBufferPtr, /* 響應緩沖區指針 */uint32* responseSizePtr /* 響應大小指針 */
);
3.2 COM Based Transformer
COM Based Transformer是一種基于COM模塊配置的轉換器。根據SRS_Xfrm_00201和SRS_Xfrm_00202的要求,COM Based Transformer提供以下功能:
- 數據序列化:基于固定數據映射將原子和結構化數據元素序列化為線性數組(SRS_Xfrm_00201)
- 配置來源:從COM模塊獲取配置信息(SRS_Xfrm_00202)
COM Based Transformer使Transformer功能可用于使用固定通信矩陣和壓縮數據表示的目標總線系統。它從系統描述中的固定數據映射獲取序列化數據的信息,并從COM模塊ECU配置中獲取配置。
代碼示例:COM Based Transformer接口定義
/* COM Based Transformer配置類型 */
typedef struct {uint16 ComHandleId; /* COM句柄標識符 */uint8 ComSignalType; /* COM信號類型 */uint8 ComBitSize; /* COM位大小 */uint8 ComBitPosition; /* COM位位置 */boolean ComSignalEndianness; /* COM信號字節序 */
} ComBased_SignalConfigType;/* COM Based Transformer序列化函數 */
Std_ReturnType ComBased_Serialize(const void* dataPtr, /* 輸入數據指針 */uint32 dataSize, /* 輸入數據大小 */uint8* targetBufferPtr, /* 目標緩沖區指針 */uint32* targetBufferSizePtr, /* 目標緩沖區大小指針 */const ComBased_SignalConfigType* configPtr /* 信號配置 */
);/* COM Based Transformer反序列化函數 */
Std_ReturnType ComBased_Deserialize(const uint8* dataPtr, /* 輸入數據指針 */uint32 dataSize, /* 輸入數據大小 */void* targetStructPtr, /* 目標結構體指針 */uint32* targetSizePtr, /* 目標大小指針 */const ComBased_SignalConfigType* configPtr /* 信號配置 */
);
4. Transformer處理流程
4.1 SOME/IP Transformer處理流程
下圖展示了SOME/IP Transformer的詳細處理流程:
從圖中可以看出,SOME/IP Transformer的處理流程主要包括以下步驟:
- 數據輸入:軟件組件發起數據傳輸或服務請求
- RTE處理:RTE接收數據并確定Transformer鏈
- SOME/IP處理:
- 序列化處理:
- 檢查數據結構
- 序列化原子和結構化數據
- 對客戶端/服務器通信添加SOME/IP協議頭
- 處理可選參數(使用Tag/Length/Value編碼)
- 反序列化處理:
- 接收線性數組
- 解析SOME/IP協議頭
- 處理異常情況
- 解析Tag/Length/Value編碼
- 跳過未知/不支持的字段
- 反序列化數據結構
- 提取需要的數據子集
- 序列化處理:
- 結果返回:返回處理結果給RTE
- RTE后續處理:處理可能的錯誤或繼續處理鏈中的下一個Transformer
- 完成處理:向軟件組件返回最終結果
這一流程體現了SRS_Xfrm_00106中要求的可擴展數據結構支持,允許在發送方接口定義中任意位置擴展結構/方法,同時接收方如果不需要新成員/參數,則不需要進行適配。發送方也不需要發送可選但當前不可用的結構成員。
5. 總結
AUTOSAR Transformer作為AUTOSAR架構中重要的基礎軟件服務組件,通過提供標準化的數據轉換機制,使應用層軟件組件與底層通信細節解耦,為不同ECU之間的通信提供了強大的支持。
主要優勢:
- 標準化接口:提供一致的接口,簡化軟件組件開發
- 可擴展性:支持新數據結構和協議的擴展
- 靈活性:支持多種轉換器類型和轉換器鏈
- 兼容性:支持不同操作系統和嵌入式環境
- 錯誤處理:提供完善的錯誤處理機制
應用場景:
- ECU間通信:實現不同ECU之間的數據交換
- 協議轉換:將應用數據轉換為特定協議格式
- 數據保護:添加校驗和等保護機制
- 數據優化:優化數據格式,提高傳輸效率
通過理解和正確使用Transformer,開發人員可以更好地實現AUTOSAR架構下的軟件系統,確保系統的可靠性、可維護性和可擴展性。