keil优化级别不同,居然会差那么大? wgui:昨天搞了个程序,使用优化level 3,结果编译出来在主界面上正常,进入另一个函数界面后居然会出现意想不到的效果,本来正常的刷屏变成了闪烁的,有时直接死掉,因为程序是FM的界面,连FM也会卡卡声,开始还以为是硬件问题,FM输出音频带不动。后来放着,又搞了一个界面,这个界面也不正常了,出现了同样问题,然后fm那个界面又正常了,无语中。。。。。。然后重新选了下优化级别,结果都正常了,,,晕死,,有没有同样问题的? jermy_z:说明你代码有漏洞,优化低的时候不会出问题,一旦优化高,就会表现出来。不是C语言高手,建议不要开优化。 emWin:是的,优化对速度的提升是指数级的,但同时要求代码非常严谨。 liliang129129:今天在优化级别3下使用while(1)循环,与在优化级别0下使用while(1)循环效果就是不一样,优化级别0就好使,3根本用不了,在3中我用的for(;;)代替的while(1)结果好使 telentmmc:优化这个问题真是很难捉摸,之前用Tasking编程,添加了一个只用于监测的变量,结果被优化掉了,搞了好久才明白,原来没被程序使用过的变量会直接被优化掉。。。 就是箭头指的这里啦,在这里可以选择编译器的优化等级。 PS:前几天小编也被这个突如其来的问题难住了,本来要做485通信,中间使用光耦进行隔离。程序下载进去后发送没有问题,就是不能接收,然后debug打断点发现根本就没有进接收中断,那么可能就是接收的光耦坏掉了,换上新的还是同样的问题。放大招,拿示波器看PA10(RXD)引脚发现有电平的变化,那就排查看是不是IO口内部坏了,换个新的mcu,还是这问题。心中怒气值在增加,想起以前也有过类似事情,用18B20测温,温度只要一超过32℃就直接跳到49℃去了,当时翻遍百度没有结果呀,而且debug下看变量的值显示未定义,WTF,这是什么鬼,跑去度娘了一下,改了优化等级然后好了能看变量数值了,再编译下载程序就没有温度错误的现象了,想想应该就是优化的问题。这次也去看看keil的优化等级,没错,是3,改成0,编译下载完美运行。长舒一口气啊,为什吗要优化程序呢,因为用了UCOS3,编出来的code比不优化比还是很大的,看来C语言水平有待提高呀。 |
关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )
GMT+8, 2025-9-22 16:36 , Processed in 0.140625 second(s), 28 queries , Gzip On.
地址:深圳市南山区科技生态园2栋A座805 电话:19926409050