CDD 簡(jiǎn)介
復(fù)雜驅(qū)動(dòng)(Complex Driver,CDD)是一種不受 AUTOSAR 標(biāo)準(zhǔn)化約束的軟件實(shí)體,它可以通過 AUTOSAR 接口和/或基礎(chǔ)軟件模塊 API 進(jìn)行訪問 AUTOSAR 組件或者被 AUTOSAR 組件訪問。
根據(jù) AUTOSAR 的分層軟件架構(gòu)文檔,復(fù)雜驅(qū)動(dòng)是基礎(chǔ)軟件復(fù)雜驅(qū)動(dòng)層的一種特定模塊,它與標(biāo)準(zhǔn) BSW 模塊或 RTE 進(jìn)行交互。
復(fù)雜驅(qū)動(dòng)的主要目的是利用特定的中斷和/或復(fù)雜的微控制器外設(shè)、外部設(shè)備(通信收發(fā)器、ASIC 等)實(shí)現(xiàn)復(fù)雜的傳感器評(píng)估和執(zhí)行器控制,以滿足特殊的功能和時(shí)序要求。
此外,它還可以用于實(shí)現(xiàn)增強(qiáng)的服務(wù)/協(xié)議或封裝非 AUTOSAR 系統(tǒng)的功能。復(fù)雜驅(qū)動(dòng)的實(shí)現(xiàn)可能依賴于具體的應(yīng)用、微控制器和 ECU。
復(fù)雜驅(qū)動(dòng)可以作為一種遷移機(jī)制,將現(xiàn)有的或新的概念引入 AUTOSAR 軟件架構(gòu)。
復(fù)雜驅(qū)動(dòng)設(shè)計(jì)建議
為了便于復(fù)雜驅(qū)動(dòng)與 AUTOSAR 架構(gòu)互聯(lián)互通,設(shè)計(jì)者應(yīng)考慮以下要點(diǎn):
文檔
用戶手冊(cè)
復(fù)雜驅(qū)動(dòng)的提供商應(yīng)提供用戶手冊(cè),以方便集成和為客戶提供信息:
復(fù)雜驅(qū)動(dòng)簡(jiǎn)介和概述
描述功能操作(初始化、正常操作、關(guān)閉、故障操作等)
描述與其他 BSW 模塊、SchM 和 Rte 的關(guān)系及需求;例如需要從 NvM 獲取內(nèi)存塊,需要配置的關(guān)鍵區(qū)段等
文件結(jié)構(gòu)和依賴關(guān)系
接口描述(包括服務(wù)):名稱、描述、重入性、參數(shù)(名稱、類型、范圍、值)、返回值(名稱、類型、范圍、值)、配置類
非功能需求描述:時(shí)序和行為需求、資源使用情況、與其他 BSW 模塊或 SW-C 的行為等
Dem 錯(cuò)誤描述,可選的 Det 錯(cuò)誤,調(diào)試變量
配置參數(shù)描述(名稱、類型、范圍、值)
內(nèi)存映射需求(Flash、RAM)
使用限制和已知問題
集成約束和對(duì)其他模塊的需求
示例
模塊 ID
復(fù)雜驅(qū)動(dòng)模塊的模塊 ID 范圍在 BSW 模塊列表文檔中進(jìn)行了描述。
實(shí)現(xiàn)
AUTOSAR 對(duì)復(fù)雜驅(qū)動(dòng)實(shí)現(xiàn)沒有太多限制。至少:
復(fù)雜驅(qū)動(dòng)應(yīng)遵循基礎(chǔ)軟件模塊的一般要求、規(guī)范等文檔的輸入規(guī)范。
復(fù)雜驅(qū)動(dòng)應(yīng)定義關(guān)鍵區(qū)段以便由 SchM 或 OS 機(jī)制處理。
復(fù)雜驅(qū)動(dòng)的模式可由 EcuM 和 BswM 模塊管理。
復(fù)雜驅(qū)動(dòng)可以使用內(nèi)存映射機(jī)制處理其內(nèi)存區(qū)段。
復(fù)雜驅(qū)動(dòng)可以使用 Det 或 Dem 模塊報(bào)告錯(cuò)誤。
CDD文件
代碼文件
除了基礎(chǔ)軟件模塊的一般要求文檔中的要求外,復(fù)雜驅(qū)動(dòng)模塊的代碼文件結(jié)構(gòu)不是固定的。
至少應(yīng)提供 CDD_.c。中斷函數(shù)可放在 CDD_Irq.c 中。回調(diào)函數(shù)可放在 CDDCallout.c 中。根據(jù)需要,鏈接時(shí)從配置生成的 C 對(duì)象可放在 CDD_Lcfg.c 文件中。
根據(jù)需要,構(gòu)建后從配置生成的 C 對(duì)象可放在 CDD__PBcfg.c 文件中。
如果復(fù)雜驅(qū)動(dòng)模塊實(shí)現(xiàn)需要額外的代碼文件,可以自由包含它們。
頭文件
下圖包含了復(fù)雜驅(qū)動(dòng)模塊的 AUTOSAR 定義的頭文件層次結(jié)構(gòu)。
復(fù)雜驅(qū)動(dòng)模塊應(yīng)提供一個(gè)頭文件結(jié)構(gòu),以便只需要包含 CDD_.h 文件就可以使用該模塊。
如果需要由其他 BSW 模塊處理某些回調(diào)函數(shù),復(fù)雜驅(qū)動(dòng)模塊可以提供 CDD__Cbk.h 頭文件。
根據(jù)需要,配置生成的 C 對(duì)象聲明可放在 CDD_Cfg.h, CDDPBcfg.h, CDD_Lcfg.h 文件中。
如果復(fù)雜驅(qū)動(dòng)模塊實(shí)現(xiàn)需要額外的頭文件,可以自由包含它們。頭文件應(yīng)該是自包含的,即它們將包含所需的其他所有頭文件。
復(fù)雜驅(qū)動(dòng)模塊可以包含 Det.h 和/或 Dem.h 頭文件來報(bào)告錯(cuò)誤。
如果需要定義某些內(nèi)存映射區(qū)域,復(fù)雜驅(qū)動(dòng)模塊可以包含_MemMap.h 頭文件,其中是模塊實(shí)現(xiàn)前綴。
如果配置了與 RTE 的接口,復(fù)雜驅(qū)動(dòng)模塊可以包含 Rte_CDD_.h 頭文件。
推薦的文件結(jié)構(gòu)
下圖描述了復(fù)雜驅(qū)動(dòng)模塊的基本定義的 AUTOSAR 頭文件層次結(jié)構(gòu)。
一致性檢查
復(fù)雜驅(qū)動(dòng)模塊應(yīng)避免集成不兼容的(.c 或.h)文件,如基礎(chǔ)軟件模塊通用規(guī)范中所定義的。
行為和接口描述
一些復(fù)雜驅(qū)動(dòng)不僅與其他 BSW 模塊或組件有接口,還通過 RTE 具有更抽象的接口可以被應(yīng)用 SW-C 訪問。
在這些情況下,需要一個(gè) CDD SW-C 類型來連接 RTE 和復(fù)雜驅(qū)動(dòng),并且復(fù)雜驅(qū)動(dòng)必須遵循 BSW 模塊描述模板的要求。
這個(gè)描述文件應(yīng)包含:
復(fù)雜驅(qū)動(dòng)服務(wù)的描述
類型和端口接口
內(nèi)部行為及可運(yùn)行實(shí)體的描述
可運(yùn)行實(shí)體所需的觸發(fā)事件描述
共享資源保護(hù)的互斥區(qū)描述
內(nèi)存映射
這里需要的更抽象接口稱為 AUTOSAR 接口,它們通過軟件組件模板(SWCT)進(jìn)行描述,包括端口、端口接口及其詳細(xì)信息。
用于描述這些元素的 SWCT 的基類是 ComplexDeviceDriverSwComponentType。
SWCT 中還包含稱為 RunnableEntities 的可運(yùn)行實(shí)體,用于對(duì)從 RTE 調(diào)用復(fù)雜驅(qū)動(dòng)的函數(shù)建模。用于描述 RunnableEntities(和其他一些東西)的 SWCT 的基類稱為 SwcInternalBehavior。
CDD 可運(yùn)行實(shí)體應(yīng)設(shè)計(jì)為減少 RTE 開銷,例如:
推薦服務(wù)器可運(yùn)行實(shí)體為可重入的:可以同時(shí)調(diào)用 = TRUE。
可運(yùn)行實(shí)體簽名為:void 或 StdReturnType RunnableName(void 或參數(shù))
參數(shù)配置
如果需要使用 AUTOSAR GCE 配置參數(shù),復(fù)雜驅(qū)動(dòng)必須遵循 ECU 配置規(guī)范。
至少:
配置文件應(yīng)通過 AUTOSAR 和軟件版本標(biāo)識(shí)模塊。
對(duì)于生產(chǎn)階段,不應(yīng)包含 Det,因此需要在配置中參數(shù)以禁用錯(cuò)誤報(bào)告。
與其他模塊對(duì)接
與 RTE 和 SW-C 的對(duì)接
復(fù)雜驅(qū)動(dòng)可能需要通過 RTE 與 SW-C 對(duì)接:
應(yīng)按 AUTOSAR 規(guī)定指定和實(shí)現(xiàn)所需的端口和接口(AUTOSAR 接口)。
在某些情況下,復(fù)雜驅(qū)動(dòng)必須使用 RTE 定義的某些端口特定參數(shù)。
與庫的對(duì)接
復(fù)雜驅(qū)動(dòng)可以使用 AUTOSAR 庫。
例如:復(fù)雜驅(qū)動(dòng)可以使用 E2E 庫機(jī)制傳輸防止數(shù)據(jù)損壞或丟失的通信保護(hù)。
與標(biāo)準(zhǔn) BSW 模塊對(duì)接
復(fù)雜驅(qū)動(dòng)可能需要與分層軟件架構(gòu)中的其他模塊對(duì)接,或者分層軟件架構(gòu)的模塊可能需要與復(fù)雜驅(qū)動(dòng)對(duì)接。如果是這種情況,適用以下建議:
BSW 到 CDD 的接口
復(fù)雜驅(qū)動(dòng)應(yīng)提供可以由訪問的 AUTOSAR 模塊一般配置的接口。一個(gè)典型例子是 PDU 路由:復(fù)雜驅(qū)動(dòng)可以實(shí)現(xiàn)新總線系統(tǒng)的接口模塊。
CDD 到 BSW 的接口
復(fù)雜驅(qū)動(dòng)要 AUTOSAR BSW 的模塊,只有在相關(guān)的分層軟件架構(gòu)模塊提供接口,并準(zhǔn)備被復(fù)雜驅(qū)動(dòng)訪問時(shí)才被允許。
復(fù)雜驅(qū)動(dòng)應(yīng)提供滿足依賴該信息的其他 AUTOSAR 模塊所需的所有配置參數(shù),例如如果調(diào)用 Dem 來報(bào)告生產(chǎn)錯(cuò)誤,則必須根據(jù) Dem 錯(cuò)誤代碼定義的配置標(biāo)準(zhǔn)在復(fù)雜驅(qū)動(dòng)配置中定義并引用 Dem 錯(cuò)誤代碼。
與 MCAL 模塊的接口
復(fù)雜驅(qū)動(dòng)可以直接訪問微控制器資源(例如硬件計(jì)時(shí)器)。如果所需的資源由 MCAL 模塊管理,并且沒有特定的約束(例如實(shí)時(shí)需求)。在這種情況下,復(fù)雜驅(qū)動(dòng)應(yīng)使用 MCAL 模塊的標(biāo)準(zhǔn) API 訪問 MCAL 模塊。
與 BswM、EcuM 的接口
如果使用了 ECU 狀態(tài)管理,則 ECU 模式管理和 BSW 模式管理應(yīng)該是模式管理的唯一訪問點(diǎn)。
在以下情況下應(yīng)使用 ECU 狀態(tài)管理:
Init 和 De-Init 函數(shù)應(yīng)由 EcuM 和/或 BswM 模塊專屬調(diào)用。
如果復(fù)雜驅(qū)動(dòng)處理喚醒源,它必須遵循 ECU 狀態(tài)管理規(guī)范中指定的處理喚醒事件的協(xié)議。
在以下情況下應(yīng)使用 BSW 模式管理:
復(fù)雜驅(qū)動(dòng)模式更改管理
BswM(在主核上)確定 ECU 應(yīng)關(guān)閉并向每個(gè)核分發(fā)適當(dāng)?shù)哪J角袚Q。從核上的復(fù)雜驅(qū)動(dòng)必須捕獲此模式切換,適當(dāng)?shù)厝∠跏蓟⑾?BswM 發(fā)送適當(dāng)?shù)?a target="_blank">信號(hào)以指示其準(zhǔn)備情況。
與內(nèi)存的接口
如果內(nèi)存僅由復(fù)雜驅(qū)動(dòng)管理,則可以直接訪問 NVRAM 之外的內(nèi)存。如果復(fù)雜驅(qū)動(dòng)使用標(biāo)準(zhǔn)內(nèi)存堆棧,則 NVRAM 管理是內(nèi)存堆棧的唯一訪問點(diǎn):復(fù)雜驅(qū)動(dòng)應(yīng)使用 NVM API 訪問內(nèi)存。
與看門狗的接口
看門狗可以監(jiān)視一個(gè)或多個(gè)復(fù)雜驅(qū)動(dòng)可運(yùn)行實(shí)體的執(zhí)行作為受監(jiān)督實(shí)體。應(yīng)按照看門狗管理規(guī)范所述進(jìn)行配置,并且復(fù)雜驅(qū)動(dòng)可運(yùn)行實(shí)體應(yīng)調(diào)用看門狗 API。
看門狗管理是獨(dú)占看門狗堆棧的訪問點(diǎn)。復(fù)雜驅(qū)動(dòng)不應(yīng)直接與看門狗管理交互,而應(yīng)通過 RTE 定義的端口。
與通信協(xié)議棧的接口
復(fù)雜驅(qū)動(dòng)可通過以下方式與通信協(xié)議棧交互:
可以與 PDU 路由模塊來處理 IPDU。
可以與接口交互。
可以與 NM 模塊交互。
可以與 TcpIp 模塊交互。
可以直接與 Com 模塊交互,因?yàn)榭梢杂行盘?hào)接口。
一般來說,不適合混合使用上述方式,即同時(shí)使用 PduR 訪問和 Com 訪問或接口。處理通信并可能觸發(fā) PDU 傳輸?shù)膹?fù)雜驅(qū)動(dòng)應(yīng)提供啟用/禁用傳輸?shù)?API。
與 PduR 的接口
PduR 是與通信堆棧對(duì)接以傳輸 IPDU 的總線和協(xié)議獨(dú)立的訪問點(diǎn)。復(fù)雜驅(qū)動(dòng)應(yīng)使用 PduR 模塊的標(biāo)準(zhǔn) API 訪問 IPDU。當(dāng)復(fù)雜驅(qū)動(dòng)與 PduR 交互時(shí),應(yīng)在 PduR 內(nèi)為每個(gè)復(fù)雜驅(qū)動(dòng)配置一個(gè)容器。
與Interface 模塊的接口
接口模塊是與通信堆棧對(duì)接的總線特定訪問點(diǎn)。
當(dāng)復(fù)雜驅(qū)動(dòng)與接口交互時(shí),復(fù)雜驅(qū)動(dòng)使用為接口定義的訪問函數(shù),并且應(yīng)根據(jù)復(fù)雜驅(qū)動(dòng)的需求配置接口回調(diào)。接口應(yīng)配置包含 CDD__Cbk.h 頭文件。
與 Com 模塊的接口
如果復(fù)雜驅(qū)動(dòng)處理 Com 信號(hào),則應(yīng)使用 Com 模塊的標(biāo)準(zhǔn) API 或 RTE 定義來訪問信號(hào)。
請(qǐng)參考通信規(guī)范以獲取更多詳細(xì)信息。
與 ComM 模塊對(duì)接
如果復(fù)雜驅(qū)動(dòng)使用 Com 信號(hào),則應(yīng)使用 Com 管理的標(biāo)準(zhǔn) API 請(qǐng)求“通信模式”。
如果復(fù)雜驅(qū)動(dòng)處理非 AUTOSAR 標(biāo)準(zhǔn)的,則狀態(tài)應(yīng)由 ComM 處理以協(xié)調(diào)總線通信堆棧。
與網(wǎng)絡(luò)管理接口模塊的接口
如果復(fù)雜驅(qū)動(dòng)處理非 AUTOSAR 標(biāo)準(zhǔn)的,則狀態(tài)應(yīng)由Nm_CDD 模塊處理。
Nm_CDD 應(yīng)向網(wǎng)絡(luò)管理提供服務(wù)來管理狀態(tài)。
與 TCP/IP 模塊對(duì)接
TcpIp 模塊是套接字為基礎(chǔ)與通信堆棧對(duì)接的獨(dú)占訪問點(diǎn)。
復(fù)雜驅(qū)動(dòng)應(yīng)使用 TCP/IP 模塊的標(biāo)準(zhǔn) API 訪問套接字。
與 XCP 模塊對(duì)接
如果復(fù)雜驅(qū)動(dòng)處理非 AUTOSAR 標(biāo)準(zhǔn)的,XCP 可以接口_CDD 來轉(zhuǎn)發(fā)數(shù)據(jù)。
XCP 模塊提供可由復(fù)雜驅(qū)動(dòng)使用的可配置接口:
必須激活 XCP 模塊的 XcpOnCddEnabled 參數(shù)以允許復(fù)雜驅(qū)動(dòng)功能。如果需要,復(fù)雜驅(qū)動(dòng)可以調(diào)用回調(diào)函數(shù) Xcp_RxIndication。
與診斷日志和跟蹤對(duì)接
如果復(fù)雜驅(qū)動(dòng)處理非 AUTOSAR 標(biāo)準(zhǔn)的,Dlt 可以接口_CDD 來轉(zhuǎn)發(fā)數(shù)據(jù)。
Dlt 將數(shù)據(jù)轉(zhuǎn)發(fā)給 Dcm 或使用串行接口的復(fù)雜驅(qū)動(dòng)等。
Dlt 沒有定義特定的通信接口。Dlt 規(guī)范定義了一個(gè)內(nèi)部 Dlt 通信模塊的 API。由實(shí)現(xiàn)者決定如何實(shí)現(xiàn)此通信模塊及其如何與可能的復(fù)雜驅(qū)動(dòng)通信(例如串行或 USB)。
與默認(rèn)錯(cuò)誤跟蹤器和診斷事件管理對(duì)接
復(fù)雜驅(qū)動(dòng)應(yīng)使用 Det、Dem 報(bào)告錯(cuò)誤,如 AUTOSAR 標(biāo)準(zhǔn)錯(cuò)誤描述文檔中所述。
復(fù)雜驅(qū)動(dòng)應(yīng)使用 Det 和 Dem 模塊的標(biāo)準(zhǔn) API。
復(fù)雜驅(qū)動(dòng)應(yīng)像任何 BSW 模塊一樣反應(yīng)。錯(cuò)誤 ID 應(yīng)在復(fù)雜驅(qū)動(dòng)模塊內(nèi)部定義。復(fù)雜驅(qū)動(dòng)負(fù)責(zé)發(fā)起內(nèi)部恢復(fù)。
注意:對(duì) Det 的調(diào)用可以使用模塊 ID 和/或?qū)嵗?ID 參數(shù)來區(qū)分不同的復(fù)雜驅(qū)動(dòng)。
與 OS 對(duì)接
通常,只有 BSW 調(diào)度程序和 RTE 可以使用 OS 對(duì)象或 OS 服務(wù)。因此,復(fù)雜驅(qū)動(dòng)只能訪問 GetCounterValue 和 GetElapsedCounterValue 服務(wù)。
如果用于的 OS 對(duì)象未被另一個(gè) BSW 模塊使用,則復(fù)雜驅(qū)動(dòng)可以訪問 OS,例如,復(fù)雜驅(qū)動(dòng)可以創(chuàng)建一個(gè) OS 警報(bào)并使用它。
OS 可以通過 OsRestartTask 通知復(fù)雜驅(qū)動(dòng) OS 應(yīng)用程序已被終止并重新啟動(dòng)。然后,復(fù)雜驅(qū)動(dòng)將采取適當(dāng)?shù)那謇聿僮鳌?/p>
與同步時(shí)間基管理模塊對(duì)接
如果復(fù)雜驅(qū)動(dòng)模塊實(shí)現(xiàn)用戶定義的時(shí)間基提供者,即如果它處理全局時(shí)間同步消息,則復(fù)雜驅(qū)動(dòng)模塊應(yīng)使用 StbM 模塊 API:
StbM_GetCurrentTime 讀取 StbM 的最新時(shí)間基準(zhǔn)值
StbM_GetCurrentTimeRaw、StbM_GetCurrentTimeDiff 計(jì)算時(shí)間基準(zhǔn)值更新
StbM_BusSetGlobalTime 將在總線上接收到的時(shí)間基準(zhǔn)值轉(zhuǎn)發(fā)到 StbM
此接口當(dāng)前僅限于不帶硬件時(shí)間戳的時(shí)間基提供者。請(qǐng)參閱同步時(shí)間基管理規(guī)范以獲取有關(guān) API 的詳細(xì)信息。全局時(shí)間同步的復(fù)雜驅(qū)動(dòng)模塊配置的相關(guān)詳細(xì)信息由配置中的容器 CddGlobalTimeContribution 指定。
多核系統(tǒng)中的復(fù)雜驅(qū)動(dòng)
在多核架構(gòu)的情況下,復(fù)雜驅(qū)動(dòng)可以在任何核上運(yùn)行,同時(shí)遵守以下規(guī)則:
跨分區(qū)和跨核是允許的,但要使用主/從實(shí)現(xiàn)(參考 BSW 分配指南)。
因此,如果復(fù)雜驅(qū)動(dòng)需要訪問 BSW 的標(biāo)準(zhǔn)化接口,它需要駐留在同一核上。
如果復(fù)雜驅(qū)動(dòng)駐留在不同的核上,它可以使用普通端口機(jī)制訪問 AUTOSAR 接口和標(biāo)準(zhǔn)化的 AUTOSAR 接口。這將調(diào)用 RTE,RTE 使用操作系統(tǒng)的 IOC 機(jī)制將請(qǐng)求傳輸?shù)狡渌恕?/p>
但是,如果復(fù)雜驅(qū)動(dòng)需要訪問 BSW 的標(biāo)準(zhǔn)化接口且不駐留在同一核上:
需提供標(biāo)準(zhǔn)化接口并將調(diào)用轉(zhuǎn)發(fā)到其他核
或者復(fù)雜驅(qū)動(dòng)的 Stub 部分需要在其他核上實(shí)現(xiàn),并且需要使用操作系統(tǒng)的 IOC 機(jī)制進(jìn)行本地通信。
MCAL 的復(fù)雜驅(qū)動(dòng)模塊
可以執(zhí)行微控制器驅(qū)動(dòng)器的復(fù)雜驅(qū)動(dòng),但它不能訪問其他標(biāo)準(zhǔn)模塊,因?yàn)樗谳^低的層中,除了 Det、Dem、SchM 等。
一般來說,如果對(duì)特定層施加了一些限制,這也適用于復(fù)雜驅(qū)動(dòng)。
注意事項(xiàng)
文檔化
提供用戶手冊(cè)
定義模塊 ID
實(shí)現(xiàn)
遵循基礎(chǔ)軟件模塊規(guī)范
定義關(guān)鍵區(qū)段
模式管理
內(nèi)存映射
錯(cuò)誤報(bào)告
代碼結(jié)構(gòu)
提供代碼文件
提供頭文件
檢查一致性
接口定義
定義行為和接口
配置參數(shù)
模塊關(guān)系
RTE 和 SW-C
庫
標(biāo)準(zhǔn) BSW 模塊
多核系統(tǒng)
審核編輯:湯梓紅
-
收發(fā)器
+關(guān)注
關(guān)注
10文章
3454瀏覽量
106243 -
asic
+關(guān)注
關(guān)注
34文章
1206瀏覽量
120755 -
接口
+關(guān)注
關(guān)注
33文章
8691瀏覽量
151912 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
363瀏覽量
21778
原文標(biāo)題:復(fù)雜驅(qū)動(dòng)應(yīng)如何集成到 AUTOSAR 架構(gòu)中?
文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論