CDD 簡介
復雜驅動(Complex Driver,CDD)是一種不受 AUTOSAR 標準化約束的軟件實體,它可以通過 AUTOSAR 接口和/或基礎軟件模塊 API 進行訪問 AUTOSAR 組件或者被 AUTOSAR 組件訪問。
根據 AUTOSAR 的分層軟件架構文檔,復雜驅動是基礎軟件復雜驅動層的一種特定模塊,它與標準 BSW 模塊或 RTE 進行交互。
復雜驅動的主要目的是利用特定的中斷和/或復雜的微控制器外設、外部設備(通信收發器、ASIC 等)實現復雜的傳感器評估和執行器控制,以滿足特殊的功能和時序要求。
此外,它還可以用于實現增強的服務/協議或封裝非 AUTOSAR 系統的功能。復雜驅動的實現可能依賴于具體的應用、微控制器和 ECU。
復雜驅動可以作為一種遷移機制,將現有的或新的概念引入 AUTOSAR 軟件架構。
復雜驅動設計建議
為了便于復雜驅動與 AUTOSAR 架構互聯互通,設計者應考慮以下要點:
文檔
用戶手冊
復雜驅動的提供商應提供用戶手冊,以方便集成和為客戶提供信息:
- 復雜驅動簡介和概述
- 描述功能操作(初始化、正常操作、關閉、故障操作等)
- 描述與其他 BSW 模塊、SchM 和 Rte 的關系及需求;例如需要從 NvM 獲取內存塊,需要配置的關鍵區段等
- 文件結構和依賴關系
- 接口描述(包括服務):名稱、描述、重入性、參數(名稱、類型、范圍、值)、返回值(名稱、類型、范圍、值)、配置類
- 非功能需求描述:時序和行為需求、資源使用情況、與其他 BSW 模塊或 SW-C 的行為等
- Dem 錯誤描述,可選的 Det 錯誤,調試變量
- 配置參數描述(名稱、類型、范圍、值)
- 內存映射需求(Flash、RAM)
- 使用限制和已知問題
- 集成約束和對其他模塊的需求
- 示例
模塊 ID
復雜驅動模塊的模塊 ID 范圍在 BSW 模塊列表文檔中進行了描述。
實現
AUTOSAR 對復雜驅動實現沒有太多限制。至少:
- 復雜驅動應遵循基礎軟件模塊的一般要求、規范等文檔的輸入規范。
- 復雜驅動應定義關鍵區段以便由 SchM 或 OS 機制處理。
- 復雜驅動的模式可由 EcuM 和 BswM 模塊管理。
- 復雜驅動可以使用內存映射機制處理其內存區段。
- 復雜驅動可以使用 Det 或 Dem 模塊報告錯誤。
CDD文件
代碼文件
除了基礎軟件模塊的一般要求文檔中的要求外,復雜驅動模塊的代碼文件結構不是固定的。
至少應提供 CDD_.c。中斷函數可放在 CDD_Irq.c 中。回調函數可放在 CDDCallout.c 中。根據需要,鏈接時從配置生成的 C 對象可放在 CDD _Lcfg.c 文件中。
根據需要,構建后從配置生成的 C 對象可放在 CDD__PBcfg.c 文件中。
如果復雜驅動模塊實現需要額外的代碼文件,可以自由包含它們。
頭文件
下圖包含了復雜驅動模塊的 AUTOSAR 定義的頭文件層次結構。
復雜驅動模塊應提供一個頭文件結構,以便只需要包含 CDD_.h 文件就可以使用該模塊。
如果需要由其他 BSW 模塊處理某些回調函數,復雜驅動模塊可以提供 CDD__Cbk.h 頭文件。
根據需要,配置生成的 C 對象聲明可放在 CDD * *Cfg.h, CDD * *PBcfg.h, CDD * *Lcfg.h 文件中。
如果復雜驅動模塊實現需要額外的頭文件,可以自由包含它們。頭文件應該是自包含的,即它們將包含所需的其他所有頭文件。
復雜驅動模塊可以包含 Det.h 和/或 Dem.h 頭文件來報告錯誤。
如果需要定義某些內存映射區域,復雜驅動模塊可以包含_MemMap.h 頭文件,其中 是模塊實現前綴。
如果配置了與 RTE 的接口,復雜驅動模塊可以包含 Rte_CDD_.h 頭文件。
推薦的文件結構
下圖描述了復雜驅動模塊的基本定義的 AUTOSAR 頭文件層次結構。
一致性檢查
復雜驅動模塊應避免集成不兼容的(.c 或.h)文件,如基礎軟件模塊通用規范中所定義的。
行為和接口描述
一些復雜驅動不僅與其他 BSW 模塊或組件有接口,還通過 RTE 具有更抽象的接口可以被應用 SW-C 訪問。
在這些情況下,需要一個 CDD SW-C 類型來連接 RTE 和復雜驅動,并且復雜驅動必須遵循 BSW 模塊描述模板的要求。
這個描述文件應包含:
- 復雜驅動服務的描述
- 類型和端口接口
- 內部行為及可運行實體的描述
- 可運行實體所需的觸發事件描述
- 共享資源保護的互斥區描述
- 內存映射
這里需要的更抽象接口稱為 AUTOSAR 接口,它們通過軟件組件模板(SWCT)進行描述,包括端口、端口接口及其詳細信息。
用于描述這些元素的 SWCT 的基類是 ComplexDeviceDriverSwComponentType。
SWCT 中還包含稱為 RunnableEntities 的可運行實體,用于對從 RTE 調用復雜驅動的函數建模。用于描述 RunnableEntities(和其他一些東西)的 SWCT 的基類稱為 SwcInternalBehavior。
CDD 可運行實體應設計為減少 RTE 開銷,例如:
- 推薦服務器可運行實體為可重入的:可以同時調用 = TRUE。
- 可運行實體簽名為:void 或 StdReturnType RunnableName(void 或參數)
參數配置
如果需要使用 AUTOSAR GCE 配置參數,復雜驅動必須遵循 ECU 配置規范。
至少:
- 配置文件應通過 AUTOSAR 和軟件版本標識模塊。
- 對于生產階段,不應包含 Det,因此需要在配置中參數以禁用錯誤報告。
與其他模塊對接
與 RTE 和 SW-C 的對接
復雜驅動可能需要通過 RTE 與 SW-C 對接:
- 應按 AUTOSAR 規定指定和實現所需的端口和接口(AUTOSAR 接口)。
- 在某些情況下,復雜驅動必須使用 RTE 定義的某些端口特定參數。
與庫的對接
復雜驅動可以使用 AUTOSAR 庫。
例如:復雜驅動可以使用 E2E 庫機制傳輸防止數據損壞或丟失的通信保護。
與標準 BSW 模塊對接
復雜驅動可能需要與分層軟件架構中的其他模塊對接,或者分層軟件架構的模塊可能需要與復雜驅動對接。如果是這種情況,適用以下建議:
BSW 到 CDD 的接口
復雜驅動應提供可以由訪問的 AUTOSAR 模塊一般配置的接口。一個典型例子是 PDU 路由:復雜驅動可以實現新總線系統的接口模塊。
CDD 到 BSW 的接口
復雜驅動要 AUTOSAR BSW 的模塊,只有在相關的分層軟件架構模塊提供接口,并準備被復雜驅動訪問時才被允許。
復雜驅動應提供滿足依賴該信息的其他 AUTOSAR 模塊所需的所有配置參數,例如如果調用 Dem 來報告生產錯誤,則必須根據 Dem 錯誤代碼定義的配置標準在復雜驅動配置中定義并引用 Dem 錯誤代碼。
與 MCAL 模塊的接口
復雜驅動可以直接訪問微控制器資源(例如硬件計時器)。如果所需的資源由 MCAL 模塊管理,并且沒有特定的約束(例如實時需求)。在這種情況下,復雜驅動應使用 MCAL 模塊的標準 API 訪問 MCAL 模塊。
與 BswM、EcuM 的接口
如果使用了 ECU 狀態管理,則 ECU 模式管理和 BSW 模式管理應該是模式管理的唯一訪問點。
在以下情況下應使用 ECU 狀態管理:
- Init 和 De-Init 函數應由 EcuM 和/或 BswM 模塊專屬調用。
- 如果復雜驅動處理喚醒源,它必須遵循 ECU 狀態管理規范中指定的處理喚醒事件的協議。
在以下情況下應使用 BSW 模式管理:
- 復雜驅動模式更改管理
- BswM(在主核上)確定 ECU 應關閉并向每個核分發適當的模式切換。從核上的復雜驅動必須捕獲此模式切換,適當地取消初始化并向 BswM 發送適當的信號以指示其準備情況。
與內存的接口
如果內存僅由復雜驅動管理,則可以直接訪問 NVRAM 之外的內存。如果復雜驅動使用標準內存堆棧,則 NVRAM 管理是內存堆棧的唯一訪問點:復雜驅動應使用 NVM API 訪問內存。
與看門狗的接口
看門狗可以監視一個或多個復雜驅動可運行實體的執行作為受監督實體。應按照看門狗管理規范所述進行配置,并且復雜驅動可運行實體應調用看門狗 API。
看門狗管理是獨占看門狗堆棧的訪問點。復雜驅動不應直接與看門狗管理交互,而應通過 RTE 定義的端口。
與通信協議棧的接口
復雜驅動可通過以下方式與通信協議棧交互:
- 可以與 PDU 路由模塊來處理 IPDU。
- 可以與接口交互。
- 可以與 NM 模塊交互。
- 可以與 TcpIp 模塊交互。
- 可以直接與 Com 模塊交互,因為可以有信號接口。
一般來說,不適合混合使用上述方式,即同時使用 PduR 訪問和 Com 訪問或接口。處理通信并可能觸發 PDU 傳輸的復雜驅動應提供啟用/禁用傳輸的 API。
與 PduR 的接口
PduR 是與通信堆棧對接以傳輸 IPDU 的總線和協議獨立的訪問點。復雜驅動應使用 PduR 模塊的標準 API 訪問 IPDU。當復雜驅動與 PduR 交互時,應在 PduR 內為每個復雜驅動配置一個容器。
與Interface 模塊的接口
接口模塊是與通信堆棧對接的總線特定訪問點。
當復雜驅動與接口交互時,復雜驅動使用為接口定義的訪問函數,并且應根據復雜驅動的需求配置接口回調。接口應配置包含 CDD__Cbk.h 頭文件。
與 Com 模塊的接口
如果復雜驅動處理 Com 信號,則應使用 Com 模塊的標準 API 或 RTE 定義來訪問信號。
請參考通信規范以獲取更多詳細信息。
與 ComM 模塊對接
如果復雜驅動使用 Com 信號,則應使用 Com 管理的標準 API 請求“通信模式”。
如果復雜驅動處理非 AUTOSAR 標準的,則狀態應由 ComM 處理以協調總線通信堆棧。
與網絡管理接口模塊的接口
如果復雜驅動處理非 AUTOSAR 標準的,則狀態應由Nm_CDD 模塊處理。
Nm_CDD 應向網絡管理提供服務來管理狀態。
與 TCP/IP 模塊對接
TcpIp 模塊是套接字為基礎與通信堆棧對接的獨占訪問點。
復雜驅動應使用 TCP/IP 模塊的標準 API 訪問套接字。
與 XCP 模塊對接
如果復雜驅動處理非 AUTOSAR 標準的,XCP 可以接口_CDD 來轉發數據。
XCP 模塊提供可由復雜驅動使用的可配置接口:
- :API 請求通過 CDD 發送 PDU
- :API 確認 PDU 的成功傳輸
- :CDD 調用的 API 指示成功接收 LPDU。
必須激活 XCP 模塊的 XcpOnCddEnabled 參數以允許復雜驅動功能。如果需要,復雜驅動可以調用回調函數 Xcp_RxIndication。
與診斷日志和跟蹤對接
如果復雜驅動處理非 AUTOSAR 標準的,Dlt 可以接口_CDD 來轉發數據。
Dlt 將數據轉發給 Dcm 或使用串行接口的復雜驅動等。
Dlt 沒有定義特定的通信接口。Dlt 規范定義了一個內部 Dlt 通信模塊的 API。由實現者決定如何實現此通信模塊及其如何與可能的復雜驅動通信(例如串行或 USB)。
與默認錯誤跟蹤器和診斷事件管理對接
復雜驅動應使用 Det、Dem 報告錯誤,如 AUTOSAR 標準錯誤描述文檔中所述。
復雜驅動應使用 Det 和 Dem 模塊的標準 API。
復雜驅動應像任何 BSW 模塊一樣反應。錯誤 ID 應在復雜驅動模塊內部定義。復雜驅動負責發起內部恢復。
注意:對 Det 的調用可以使用模塊 ID 和/或實例 ID 參數來區分不同的復雜驅動。
與 OS 對接
通常,只有 BSW 調度程序和 RTE 可以使用 OS 對象或 OS 服務。因此,復雜驅動只能訪問 GetCounterValue 和 GetElapsedCounterValue 服務。
如果用于的 OS 對象未被另一個 BSW 模塊使用,則復雜驅動可以訪問 OS,例如,復雜驅動可以創建一個 OS 警報并使用它。
OS 可以通過 OsRestartTask 通知復雜驅動 OS 應用程序已被終止并重新啟動。然后,復雜驅動將采取適當的清理操作。
與同步時間基管理模塊對接
如果復雜驅動模塊實現用戶定義的時間基提供者,即如果它處理全局時間同步消息,則復雜驅動模塊應使用 StbM 模塊 API:
- StbM_GetCurrentTime 讀取 StbM 的最新時間基準值
- StbM_GetCurrentTimeRaw、StbM_GetCurrentTimeDiff 計算時間基準值更新
- StbM_BusSetGlobalTime 將在總線上接收到的時間基準值轉發到 StbM
此接口當前僅限于不帶硬件時間戳的時間基提供者。請參閱同步時間基管理規范以獲取有關 API 的詳細信息。全局時間同步的復雜驅動模塊配置的相關詳細信息由配置中的容器 CddGlobalTimeContribution 指定。
多核系統中的復雜驅動
在多核架構的情況下,復雜驅動可以在任何核上運行,同時遵守以下規則:
- 跨分區和跨核是允許的,但要使用主/從實現(參考 BSW 分配指南)。
- 因此,如果復雜驅動需要訪問 BSW 的標準化接口,它需要駐留在同一核上。
- 如果復雜驅動駐留在不同的核上,它可以使用普通端口機制訪問 AUTOSAR 接口和標準化的 AUTOSAR 接口。這將調用 RTE,RTE 使用操作系統的 IOC 機制將請求傳輸到其他核。
- 但是,如果復雜驅動需要訪問 BSW 的標準化接口且不駐留在同一核上:
- 需提供標準化接口并將調用轉發到其他核
- 或者復雜驅動的 Stub 部分需要在其他核上實現,并且需要使用操作系統的 IOC 機制進行本地通信。
MCAL 的復雜驅動模塊
可以執行微控制器驅動器的復雜驅動,但它不能訪問其他標準模塊,因為它在較低的層中,除了 Det、Dem、SchM 等。
一般來說,如果對特定層施加了一些限制,這也適用于復雜驅動。
注意事項
文檔化
- 提供用戶手冊
- 定義模塊 ID
實現
- 遵循基礎軟件模塊規范
- 定義關鍵區段
- 模式管理
- 內存映射
- 錯誤報告
代碼結構
- 提供代碼文件
- 提供頭文件
- 檢查一致性
接口定義
- 定義行為和接口
- 配置參數
模塊關系
- RTE 和 SW-C
- 庫
- 標準 BSW 模塊
- 多核系統
-
微控制器
+關注
關注
48文章
7659瀏覽量
152184 -
收發器
+關注
關注
10文章
3474瀏覽量
106282 -
RAM
+關注
關注
8文章
1369瀏覽量
115065 -
AUTOSAR
+關注
關注
10文章
363瀏覽量
21801 -
BSW
+關注
關注
0文章
15瀏覽量
3527
發布評論請先 登錄
相關推薦
如何將F-RAM?添加到現有的PSoC? Creator項目?
【設計技巧】基于AUTOSAR的電機驅動系統報告
AUTOSAR軟件架構是由哪些部分組成的
AUTOSAR軟件架構(二)
![<b class='flag-5'>AUTOSAR</b><b class='flag-5'>軟件</b><b class='flag-5'>架構</b>(二)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AUTOSAR軟件架構概述
![<b class='flag-5'>AUTOSAR</b><b class='flag-5'>軟件</b><b class='flag-5'>架構</b>概述](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
討論AUTOSAR方法中的軟件組件的概念
AUTOSAR CP的復雜驅動是什么
![<b class='flag-5'>AUTOSAR</b> CP的<b class='flag-5'>復雜</b><b class='flag-5'>驅動</b>是什么](https://file1.elecfans.com/web2/M00/AC/89/wKgZomU7aHmAN0Z9AAQEQ5vHhTM452.jpg)
AUTOSAR架構下,持續集成CI的最佳實踐
![<b class='flag-5'>AUTOSAR</b><b class='flag-5'>架構</b>下,持續集成CI的最佳實踐](https://file.elecfans.com/web2/M00/52/D4/pYYBAGLNkrKAeFJaAAAjXRuImx0496.png)
評論