本文介紹三個章節:
- 可恢復錯誤注入驗證
- 狀態機自動注錯演示
- 開發過程中常見問題
一、 可恢復錯誤注入驗證
可恢復錯誤發生時需要進行 recorder,與不可恢復錯誤配置的不同之處:把 reactor.c 和 Fusa_Config.c 重新配置。
圖 (1)
接口函數:Fusa_ReactorMainFunction。
圖 (2)
圖 (3)
圖 (4)
圖 (5)
Pad0/Pad1 與 SEM 狀態Mapping:
PAD1 |
PAD0 |
Chip Situation |
0(沒有相應 err status 置起來) |
0 |
Norminal |
0 |
1(有相應 err status 置起來) |
Recoverable Error |
1 |
X(Do not care) |
Fatal |
表 (1)
圖 (6)
如果不觀察硬體行為,那麼 “Framework_Test.c/Fusalib_InitReactor();”依舊關閉,保證 log pass 即可。
依舊根據中斷號(例 gpio uncorr/corr中斷號: 88)來驗證注錯。
圖 (7)
圖 (8)
此圖包含各模塊安全機制和各機制可恢復錯誤中斷號的信息。
圖 (9)
根據圖(8)中的內容來確定各機制的 shell 命令。
二、 狀態機自動注錯演示
FusaLib 狀態遷移圖如下所示:
圖 (10)
用戶通過調用 FusaLib_MainFunction 完成狀態遷移:
圖 (11)
圖 (12)
圖 (13)
圖 (14)
上電狀態機自動運行,跑完後自動 PwROFF。
三、 開發過程中常見問題
1、EB 驗證、生成後出現錯誤:
圖 (15)
在 iar 中看看有沒有包含這個文件:(已包含)
圖 (16)
對比此版與 EB 生成前(fusalib-all)的不同:
圖 (17)
引起錯誤的模塊:Mcal_Cfg,全部替換為 fusalib-all 的內容;其他的不同沒有影響。
Mcal_Cfg\E3_ref_gateway_E3640\config xdm 全部替換 fusalib-all 的內容,xdm 只影響資源配置。
Mcal_Cfg\E3_ref_gateway_E3640\output\include Dio_Cfg.h 中GPIO MAXCHANNEL 和 GPIO MAXPORT 沒有定義,替換為 fusalib-all 內容。
圖 (18)
Mcal_Cfg\E3_ref_gateway_E3640\output\src\Mcu_ClkCfg.c 由於 EB 的配置與重新生成出現較大的不同,主要體現在 pll的開關,總線時鐘的配置,外設的時鐘速率。
圖 (19)
圖 (20)
圖 (21)
Mcu_RstCfg.c 也有較大不同。
圖 (22)
總結:EB 重新配置生成導致 Mcal_Cfg\E3_ref_gateway_E3640\config 與 Mcal_Cfg\E3_ref_gateway_E3640\output 的不同造成編譯錯誤。
圖 (23)
沒有錯誤。
2、IDE環境中的 Test 的路徑造成的驗證失敗:
圖 (24)
參考《Semidrive E3 MCAL3.0&FusaLib PTG1.1 功能安全開發(一)》第二章圖(6),編譯不出錯,log 列印 pass。
3、修改 Part_Config.h,出現編譯錯誤:
圖 (25)
因為 LIN 通過 UART 發出,Part_Config.h 中 LIN 不配置導致 Fusa_Chip.c 出現錯誤,已修改:
圖 (26)
修改後編譯通過。
4、log 卡住,Sem_fault 燈亮一下後滅掉:
圖(27)
對比之前跑通 log 並成功列印 pass 的工程;
圖 (28)
關掉 Framework_Test.c/Fusa_InitReactor,log pass;sem_fault 燈不亮,硬體沒有可供觀察的現象。
如果不做 reactor,這個 log 的顯示的信息就可以完成注錯的目的。
圖 (29)
5、如果配置沒問題,log 一直列印 “Failed!” 請重新上電。
6、如果編譯時遇到“缺少一個標識符”錯誤,檢查程序符號及其他地方。
參考資料:
《FusaLib 培訓資料 PPT》
歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com
作者:Rita Liu / 劉倩
評論