打印

KEIL问题求助

[复制链接]
1604|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dalong168|  楼主 | 2011-12-28 11:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

这两种方法程序执行的结果居然不一样,前一个能驱动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 | 只看该作者
借楼主个地方请教一下,我这个好奇怪
 
if(ledcmd)
   {
    RedLED_OFF();
    GreenLED_ON();
   }
   else
    GreenLED_OFF();

GreeLED_ON();执行完下一步直接跳入GreenLED_OFF();什么道理

使用特权

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

本版积分规则

57

主题

181

帖子

2

粉丝