问题影响MCAL版本
所有已发布的MC0/MD1/ME0/HA0 v2.3.0 及之前的MCAL。
问题描述
通过Wdg模块的YCT工程配置无法使能Wdg_Inst0(WDG模块)和Wdg_Inst1(EWDG模块)的SchM保护,存在喂狗序列被外设中断打断导致WDG复位的风险。
9a7559ce-e9f9-499c-8a8f-dcf89c231547-image.png
问题分析:
在Wdg模块的SchM实现(SchM_Wdg_180_Inst0.h,SchM_Wdg_180_Inst0.c, SchM_Wdg_180_Inst1.h,SchM_Wdg_180_Inst1.c)中使用了基于宏WDG_SCHM_SUPPORT的条件编译,决定是否开启Wdg模块的SchM保护功能,而YCT工程中Wdg模块(Wdg_180_Inst0和Wdg_180_Inst1)SchM配置产生的宏定义为WDG_180_INST0_SCHM_SUPPOR和WDG_180_INST1_SCHM_SUPPORT,与WDG_SCHM_SUPPORT没有任何关联。
在WDG_SCHM_SUPPORT未定义的情况下,Wdg模块的SchM保护函数默认为空函数,从而导致Wdg模块的SchM保护功能总是disable ,无法enable:
a00096d0-158d-4e38-8a1f-156c9c642a2a-image.png
解决方案:
已发布MCAL版本
通过在应用工程配置全局宏WDG_SCHM_SUPPORT = STD_ON使能Wdg模块的SchM保护。
① 通过YCT配置工程实现(适用用VSCode IDE + CMake + GCC/IAR/Keil/GHS工程)
在YCT配置工程的ProjecSetting -> Compiler Option -> Compiler Options -> Other flags输入框中单独一行输入-DWDG_SCHM_SUPPORT=STD_ON:
aa53b35a-b0b3-4b72-b32f-60ce3a93c2bb-image.png
② 在IAR/Keil/GHS IDE工程的C compiler预定义宏配置中增加WDG_SCHM_SUPPORT = STD_ON
未来发布MCAL新版本修复
通过在Wdg模块的SchM实现(SchM_Wdg_180_Inst0.h和SchM_Wdg_180_Inst1.h)中使用基于WDG_180_INST0_SCHM_SUPPORT和WDG_180_INST1_SCHM_SUPPORT判断:
a2946e89-709f-4601-97cd-a53cfa3fa40d-image.png
9d98918f-30b4-4718-8d9b-9f3e8a015e9f-image.png
具体位置:
904e4b76-0cc8-47e3-b833-7ac9ff960770-image.png