[应用相关]

MCU软件编程调试经验分享1

[复制链接]
1007|2
手机看帖
扫描二维码
随时随地手机跟帖
tanmingjin|  楼主 | 2020-7-12 16:07 | 显示全部楼层 |阅读模式
主题:变量初始化的重要性
我们经常在软件编程中会遇到一种很奇怪的问题,程序调试的好好的,突然加了一行代码之后或者调换了一下初始化顺序,程序的功能就出错了,把这行代码注释掉之后,哎,程序又正常了,但加的这一行代码和我程序的功能完全没有关系。
遇到这种问题,大概率是因为我们某个变量没有进行初始化导致,所以这种问题,首先要查一下定义的变量是否都有初始化。
下面举一个例子: 两次调用TMR_Config只是位置不同,但TMR_DIV的值却不同,这样就会导致定时器功能不正常。
A:
USB1.png
B:
USB2.png




我们在配置中用到了一个局部变量TMR_TimerBaseInitType TMR_TMReBaseStructure1;
局部变量是在栈上动态分配的,也就是每次调用TMR_Config,TMR_TimerBaseInitType TMR_TMReBaseStructure1分配的内存地址会不一样,如果我们没有将变量的值初始化,那边这个变量的值就会是一个随机值。
因此在软件编程过程中声明的变量一定要进行初始化再使用,特别是一些变量比较多的结构体,一定要保证所有的变量都有初始化。

使用特权

评论回复
084425| | 2020-7-12 18:37 | 显示全部楼层
顶一下,变量初始化很重要,这也体现了库函数的重要性

使用特权

评论回复
muyichuan2012| | 2020-7-12 19:59 | 显示全部楼层
Keil编译器的确有这个问题,如果未将结构体成员全部完全初始化,编译器会将未初始化的成员赋一个随机值,因此程序跑起来会很奇怪。以前一个FSMC的案子也遇到过这种情况。

使用特权

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

本版积分规则

4

主题

23

帖子

0

粉丝