发现AME源码一个恶性BUG, FSMC初始化缺一个成员!
在void LCD_FSMC_Config(void)函数中, 初始化FSMC时,FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
这条语句缺了....
============================
FSMC_NORSRAMInitTypeDefFSMC_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.后记, 局部变量一定要先赋值后使用...局部结构体尤其要注意
IAR下好像没遇到什么问题,谢谢提醒。 本帖最后由 诗诺比 于 2014-5-14 14:47 编辑
nbzwt 发表于 2014-5-14 13:41 static/image/common/back.gif
IAR下好像没遇到什么问题,谢谢提醒。
问题在于 未初始化的局部变量, 这在某些情况下可能有问题, 某些情况下可能没有
但从C语言规范来说...是不可以使用未赋值的局部变量的, 其值未知
我在MDK下, 开启FPU才出现这问题
页:
[1]