找回密码
 注册
关于网站域名变更的通知

STM32编译器给你使绊子

2023-8-11 16:25| 查看: 123| 评论: 0

摘要: keil优化级别不同,居然会差那么大? wgui:昨天搞了个程序,使用优化level 3,结果编译出来在主界面上正常,进入另一个函数界面后居然会出现意想不到的效果,本来正常的刷屏变成了闪烁的,有时直接死掉,因为程序 ...
640.jpg
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编程,添加了一个只用于监测的变量,结果被优化掉了,搞了好久才明白,原来没被程序使用过的变量会直接被优化掉。。。
640 (1).jpg
就是箭头指的这里啦,在这里可以选择编译器的优化等级。

PS:前几天小编也被这个突如其来的问题难住了,本来要做485通信,中间使用光耦进行隔离。程序下载进去后发送没有问题,就是不能接收,然后debug打断点发现根本就没有进接收中断,那么可能就是接收的光耦坏掉了,换上新的还是同样的问题。放大招,拿示波器看PA10(RXD)引脚发现有电平的变化,那就排查看是不是IO口内部坏了,换个新的mcu,还是这问题。心中怒气值在增加,想起以前也有过类似事情,用18B20测温,温度只要一超过32℃就直接跳到49℃去了,当时翻遍百度没有结果呀,而且debug下看变量的值显示未定义,WTF,这是什么鬼,跑去度娘了一下,改了优化等级然后好了能看变量数值了,再编译下载程序就没有温度错误的现象了,想想应该就是优化的问题。这次也去看看keil的优化等级,没错,是3,改成0,编译下载完美运行。长舒一口气啊,为什吗要优化程序呢,因为用了UCOS3,编出来的code比不优化比还是很大的,看来C语言水平有待提高呀。

本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|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

返回顶部