cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 4301|回复: 2

发现AME源码一个恶性BUG, FSMC初始化缺一个成员!

[复制链接]
发表于 2014-5-12 17:02:06 | 显示全部楼层 |阅读模式
在void LCD_FSMC_Config(void)函数中, 初始化FSMC时,
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
这条语句缺了....
============================

FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
在函数体内, 这个结构体是局部变量,
局部变量并不总是0的...

发现经过..
1. 移植MDK后, 总是进入HardFault_Handler中断...
   跟踪到的位置很奇怪...表面上没啥问题是个Delay,而且不是第一次执行

2. 发现关闭FPU后, 一切OK

3. 陷入误区, 找不到原因

4. 发现屏蔽LCD_FSMC_Config这个函数后, 一切正常

5. 发现调速语序后, 适当的地方加入FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);就OK

6. 逐一核对 FSMC_NORSRAMStructInit函数, 发现源码中缺了之前提到的那条...

7. 总结原因:  FPU开启后应该会有额外的初始化, 造成RAM占用比不开时多些,

原本FSMC_NORSRAMInitStructure所在的RAM区在上电后清零的, 但在FPU初始化时, 脏掉了...
导致 FSMC配置错误 , 执行失败


8.  后记, 局部变量一定要先赋值后使用...局部结构体尤其要注意


评分

参与人数 2金钱 +6 收起 理由
abcd + 3 查错高手,相当细心
549597890 + 3 我这要学的还有很多...

查看全部评分

发表于 2014-5-14 13:41:26 | 显示全部楼层
IAR下好像没遇到什么问题,谢谢提醒。
 楼主| 发表于 2014-5-14 14:45:16 | 显示全部楼层
本帖最后由 诗诺比 于 2014-5-14 14:47 编辑
nbzwt 发表于 2014-5-14 13:41
IAR下好像没遇到什么问题,谢谢提醒。

问题在于 未初始化的局部变量, 这在某些情况下可能有问题, 某些情况下可能没有


但从C语言规范来说...是不可以使用未赋值的局部变量的, 其值未知

我在MDK下, 开启FPU才出现这问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-11-21 20:09 , Processed in 0.068563 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表