[应用相关] 结构体成员未完全初始化导致程序异常

[复制链接]
 楼主| 低语之树 发表于 2025-3-13 10:27 | 显示全部楼层 |阅读模式

Questions

结构体成员未完全初始化会导致什么样的异常?请举例说明。

       Answer

使用非官方程序,由于某些外设驱动在配置结构体时,未完全初始化所有成员,导致程序运行异常。


以 FSMC 为例,FSMC_NORSRAMInitStructure 结构体共有 15 个成员,若 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait 没有配置,则可能出现以下情形:使用 IAP 引导 APP 程序,APP 程序出现 FSMC 驱动 LCD 刷屏很慢。


用户只配置了 FMSC 结构体的 15 个成员中的 14 个,其中 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait没有配置,该成员变成了 SRAM 中的随机值,因此会将错误的配置写到 BK1CTRL1 中。


解决办法:
1. 使用 AT32 官方程序,避免结构体未完全初始化问题。
2. 将所有结构体成员都完成初始化,对于上述 FSMC,在 void ILI9806_GPIO_FSMC_Init(void)中增加 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;语句。
扩展分析C 语言的写法一定要严谨规范,否则类似 FSMC 结构体成员未完全初始化的现象同样存在于 TMR,USART,CAN等任何外设,且现象不固定,比较难 debug。

ForgottenRealm 发表于 2025-3-14 17:02 | 显示全部楼层
结构体成员未完全初始化肯定会有问题啊。
作业粉碎机 发表于 2025-3-15 17:23 | 显示全部楼层
建议在初始化结构体时,使用一个默认值填充所有成员,以避免未初始化的成员导致的随机行为
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

68

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部