AUTOSAR 架構下看門狗的理解

一、簡介

本文主要介紹AUTOSAR 架構下的WdgDriver WdgIf WdgM 模塊,分析模塊之間的依賴關係以及運行原理以幫助快速理解。本文以MPC5746R爲主控芯片,以FS6500爲SBC,DaVinci Configurator 爲AUTOSAR工具鏈。

二、模塊架構與依賴

一、模塊介紹

AUTOSAR架構中的WDG 一共分爲三個部分,Wdg Driver Wdg Interface Wdg Manager。其中Wdg Driver分爲 External watchdog driver 與 Internal watch driver。其中外部驅動由SBC提供功能,內部驅動由SWT模塊提供功能。MPC5746R有三個SWT(Soft Watchdog Timer),SWT0 負責CPU0,SWT1負責CPU1,SWT2可以由CPU0 與CPU1訪問。

Wdg Driver 提供底層喂狗與設置看門狗模式的驅動函數,由WdgIf抽象成Wdg Device。WdgM獲取WdgIf的抽象數據得到底層的配置數據與驅動接口函數。

WdgM一共支持三種形式的看門狗檢查方式。1.AliveSpuervision 2.DeadlineSupervision 3. LogicalSupervision

AliveSpuervision提供一般的喂狗服務,即監控週期性程序是否能正常執行,保證程序處於Alive狀態。

DeadlineSupervision提供監督軟件在兩個狀態之間的轉換時間。

LogicalSupervision提供監督軟件執行順序的正確性。

根據不同的檢查方式,WdgM可以抽象出不同的CheckPoint,Rte層可以通過函數

WdgM_CheckpointReached()來通知WdgM程序正在正確運行。

二、模塊交互與依賴

看門狗模塊由WdgM統一管理後對外,這裏只圍繞WdgM模塊分析與其他模塊的依賴性。

  1. WdgIf模塊,WdgM通過WdgIf接口更改WdgDriver的驅動模式,同時通知看門狗觸發條件
  2. EcuM模塊,管理WdgM的Initializing 和DeInitializing狀態,在Sleep模式下出發硬件看門狗

  3. Mcu模塊,在WdgM監控程序失敗之後,可以通過Mcu的接口Mcu_PerformReset立即重新ECU單元
  4. Det模塊,斷言開發中的錯誤
  5. Dem模塊,WdgM 在偵測到錯誤之後,可以通過Dem模塊觸發Event
  6. SchM模塊,WdgM 調用SchM模塊接口WdgM_GlobalSuspendInterrupts進入臨界區,WdgM_GlobalRestoreInterrupts退出臨界區
  7. Rte模塊,Rte通過WdgM_CheckpointReached()接口,監控SWC是否按照設計運行
  8. BswM模塊,WdgM在監控Spuervised Entity失敗後,可以通過BswM模塊重啓被監控程序

  9. OS模塊,週期性調度Task通過WdgM_MainFunction()調用WdgM_UpdateTickCount()接口爲WdgM提供時間戳

具體框圖如下:

                           

 

三、模塊配置

一、Wdg

 

Wdg Driver提供三種喂狗模式給WdgM管理,WdgM可以通過Wdg_SetMode接口設置看門狗運行模式

  1. WdgSettingFast 快速喂狗
  2. WdgSettingOff 關閉看門狗
  3. WdgSettingSlow 慢速喂狗

Wdg External Trigger Counter :外部定時器,定時調用Cbk函數,檢測喂狗條件並喂狗

二、Wdg_Sbc

WdgGptChannelParameterRef :關聯Gpt 模塊,利用Cbk函數喂狗執行喂狗操作。

Q :爲何要用定時中斷喂狗?

A : 一般理解,不在定時中斷函數中喂狗是爲了方式在主函數異常的情況,中斷服務函數還能正常執行,這樣喂狗起不到真正的作用。在AUTOSAR中爲何在SBC 外部看門狗採用這種方式,因爲 Wdg_30_Sbc_SetTriggerCondition 函數只是負責根據配置調整看門狗喂狗的時機,然後Gpt的Cbk函數會在這個時間到達的同時執行喂狗操作。如果,MainFunction沒有及時的設置看門狗觸發條件,Cbk會因爲提前喂狗導致看門狗出錯.

截取Gpt回調函數如下:

              

 

三、WdgIf

關聯Wdg Driver驅動函數,與WdgM直接通過函數接口關聯,因此WdgIf沒有Lcfg文件.關聯的關鍵函數如下

             

 

 

四、WdgM

WdgMDemEventParameterRefs :關聯Dem模塊,在WdgM模塊出錯時可以Event的方式記錄下來。

WdgMMode :

1)WdgMAliveSupervision :激活監控模式

2 ) WdgMDeadlineSupervision :截止監控模式

3)WdgMLocalStatusParams :邏輯監控模式

        WdgMSupervisedEntity :監控實體

WdgMWatchdog :管理的Wdg Device

 

四、源碼分析

WdgIf 有兩個對外接口:Std_ReturnType WdgIf_SetMode(uint8 DeviceIndex, WdgIf_ModeType WdgMode )

                                      void WdgIf_SetTriggerCondition( uint8 DeviceIndex, uint16 Timeout )

 

都是通過DeviceIndex 來確定所屬的驅動列表,WdgM模塊會通過所管理的Device數量來輪詢調用接口

截取一段WdgM_Init的代碼說明:

        

 

二、內部狗與外部狗的區別

WdgM對外部狗與內部狗的管理方式相同,都是通過SetTriggerCondition的方式設置,在通過關聯的Gpt模塊的Ckb函數來實現喂狗。但是兩者在內部實現方式不一致。

內部狗通過定時器完成計數,每次觸發中斷都會關閉定時器,需要SetMode重新開啓然後繼續計數,最後在Cbk中完成喂狗。

設置運行模式,開啓定時器

        

 

設置觸發條件,寫入計數值

        

 

Gpt 回調函數檢測喂狗條件,並喂狗

                      

 

三、Checkpoint做了哪些事,如何監控程序邏輯

Logical supervision 主要是爲了監控程序流按照原先設計的步驟進行。因此一個程序流可能需要多個Checkpoint 才能完成監控。

WdgM通過接口函數WdgM_CheckpointReached  來表示程序流的正確運行,函數接口的詳細描述如下。

Std_ReturnType WdgM_CheckpointReached( WdgM_SupervisedEntityIdType SEID, WdgM_CheckpointIdType CheckpointID )

通過SupervisedEntityId 與CheckpointId定位到關聯的Application;同時輸出新的AliveCounter 值,由MainFunction檢查是否在

AliveIndication + MaxMargin 與 AliveIndication - MinMargin的範圍之內。否則將WdgMd的狀態切換爲STATUS_FAILED。然後調用Dem_ReportErrorStatus接口以Event的方式告知系統發生故障。

四、多核的WdgM 管理

未完待續

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章