搜索
bottom↓
回复: 15

Keil优化导致错误频生

[复制链接]

出0入0汤圆

发表于 2009-12-29 11:26:27 | 显示全部楼层 |阅读模式
我写程序是按照"稳打稳扎""步步为营"的战略,将功能要求各个分解分布实现,每一个模块逐个调试实现再继续写下一个模块.可是当代码写到40K附近时就总会出现一些莫名其妙的问题,比如原先完全正常调试通过的功能不正常了,比如软件模拟一个串行时序,时序就不对了,延时函数我开始都是用示波器观测确定的(观察此函数反汇编没有与之前不同),找了好久的问题最后尝试修改这个函数所在文件优化等级,将速度优先改为代码优先,嘿,好了.
    可是后面接着写又有其它问题了,比如串口接收,每接收到一个字节都计算CRC,一帧结束后校对CRC,原本好好的,增加代码后在某一特殊情况下串口接收不正确了(在其它情况下均正常),设置断点发现计算CRC的函数返回的结果根本就不正确,在该函数内设置断点发现程序都没进入这个函数了.但是我看反汇编确实有进入此函数的代码生成.于是我再次修改此函数所在文件的优化等级,修改为0级后就一切正常了.
    KEIL的默认优化级别是8级速度优先.
    我就有个疑问,为什么在程序小的时候没出现问题,代码越长就出现这样那样的优化问题?更要命的时,在代码很长后写程序如果不正常怎么知道是自己写的程序本身有问题还是KEIL的优化干的坏事?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-12-29 22:41:23 | 显示全部楼层
好经验啊,学习了,关于编译器优化的问题我也遇到过的

出0入0汤圆

发表于 2011-4-16 15:26:28 | 显示全部楼层
我也有这个问题,程序 10k 以下都正常,达到 33k 每次开关机都会造成EEPROM 乱写东西,将优化降到 3 就正常..
变量不优化都已经处理,不知道为什么会乱写..

出0入0汤圆

发表于 2011-4-16 16:24:40 | 显示全部楼层
从来不开优化的飘过~

出0入0汤圆

发表于 2011-4-16 23:25:10 | 显示全部楼层
我用 W77E516B 优化(8)都正常,使用STC12C5A60S2只能优化到(3)...
另外发现一个问题,如果将电源快速开开关关,STC会乱跳程序..甚至将一个没用的程序居然跑进去运行??
为什么W77E516B都不会?

出0入0汤圆

发表于 2016-5-19 13:52:34 | 显示全部楼层
确实,优化这个东西你要是水平不够还发现不了。

出0入0汤圆

发表于 2016-5-19 17:50:24 | 显示全部楼层
本帖最后由 lovemini 于 2016-5-19 17:51 编辑

说明你的程序没有完全按照规范来写。 有些细节被优化掉了。
尤其是 volatile 关键字的使用。

出0入0汤圆

发表于 2016-6-4 08:44:24 来自手机 | 显示全部楼层
lovemini 发表于 2016-5-19 17:50
说明你的程序没有完全按照规范来写。 有些细节被优化掉了。
尤其是 volatile 关键字的使用。 ...

同意你的说法

出0入0汤圆

发表于 2016-6-29 14:57:53 | 显示全部楼层
如果你不懂优化的原理,就不要使用它,否则出现问题没法解决

出0入0汤圆

发表于 2016-6-29 17:05:53 | 显示全部楼层
dz_xinyu 发表于 2016-6-29 14:57
如果你不懂优化的原理,就不要使用它,否则出现问题没法解决

可以完全不使用优化,但不优化生成的烧录文件大好多。。(话说现在的优化也够吐血的,你放个变量计数什么的,它认为没用就给优化掉了。。而且Keil的优化等级默认是最狠的那种,可苦了不少同学了。。

出0入0汤圆

发表于 2016-6-29 17:16:57 | 显示全部楼层
Immortality 发表于 2016-6-29 17:05
可以完全不使用优化,但不优化生成的烧录文件大好多。。(话说现在的优化也够吐血的,你放个变量计数什么 ...

看来优化真得重视起来了

出0入0汤圆

发表于 2016-6-30 09:47:17 | 显示全部楼层
一般说来,如果你发现优化出了问题,都是你程序写的问题。

出0入0汤圆

发表于 2016-6-30 10:02:42 | 显示全部楼层
不排除编译器有BUG,但绝大部分是应用软件的问题。
在最低和最高优化下测试软件能否正常俺认为是个好习惯,如果软件一优化就不正常,想想心里都不踏实。
  

出0入0汤圆

发表于 2016-7-2 10:46:22 | 显示全部楼层
Immortality 发表于 2016-6-29 17:05
可以完全不使用优化,但不优化生成的烧录文件大好多。。(话说现在的优化也够吐血的,你放个变量计数什么 ...

不知道IAR有没有优化的功能,我收到同学的程序里面一堆没用的变量没删,我都手动改的。。。。累死了。。

出0入22汤圆

发表于 2016-7-2 12:25:28 | 显示全部楼层
我一般用优化 1等级。适当优化就可以了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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