KEIL问题求助

[复制链接]
2577|2
 楼主| dalong168 发表于 2011-12-28 11:31 | 显示全部楼层 |阅读模式
1.JPG 2.JPG
这两种方法程序执行的结果居然不一样,前一个能驱动SSD1963,后一个不能驱动SSD1963(把1963初始化程序优化掉了),求解谢谢大侠,谁碰到过这种无缘无故的优化掉不应该的程序
airwill 发表于 2011-12-29 08:43 | 显示全部楼层
呵呵, 编译优化是个大问题.
这主要是因为
1. 你的 SSD1963 的驱动程序里使用了些延时类的指令, 高的优化级会改变这些延时的执行时间.
2. 缺少 volatile 的变量定义. 假如使用 FSMC 方式驱动, 要把假定的 FSMC 存储端口置 volatile. 否则优化程序直接改变你的时序, 甚至不进行端口写操作.
3. 其他原因, 呵呵, 还有最后一招, 用仿真器跟踪, 看两种方式执行差别到底在哪里,
或者编译是选 C compile lst , 然后对比生成的汇编的代码
swx2010 发表于 2011-12-29 11:40 | 显示全部楼层
借楼主个地方请教一下,我这个好奇怪

  1. if(ledcmd)
  2.    {
  3.     RedLED_OFF();
  4.     GreenLED_ON();
  5.    }
  6.    else
  7.     GreenLED_OFF();

GreeLED_ON();执行完下一步直接跳入GreenLED_OFF();什么道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

185

帖子

2

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