本文介绍三个章节:
- 可恢复错误注入验证
- 状态机自动注错演示
- 开发过程中常见问题
一、 可恢复错误注入验证
可恢复错误发生时需要进行 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 / 刘倩
评论