打印
[应用相关]

结构体成员未完全初始化导致程序异常

[复制链接]
597|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
低语之树|  楼主 | 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 | 只看该作者
建议在初始化结构体时,使用一个默认值填充所有成员,以避免未初始化的成员导致的随机行为

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

0

粉丝