咨询电话: 020-88888888
KEIL里的优化选项解读!
发布于 2024-05-20 20:02 阅读()
优化大家都知道,-O0,-O1,-O2,-O3,等级越高优化程度越高,代码的执行效率也就越高。但是开启优化存在几个问题:
1、低优化等级代码能跑,开启高优化等级后代码就跑不起来了
2、高优化等级代码能跑,开启低优化等级后代码就跑不起来了
3、Optimize for time的3种状态是什么意思?
问题1和2的解决思路看看硬汉大神的帖子
我这里也贴一下截图
除了硬汉说的,我再补充点。
按照硬汉的思路我从-O0 ->-O3对GD32F450的工程进行实验,发现ADC在-O0的时候可以正常运行,一但超过-O1,就进不了DMA中断了。所以可以排除硬件配置有问题。
然后就是无头苍蝇似的找问题,最后想起来对比下他们的寄存器
通过对比发现TIMER的寄存器都一样,ADC忘了看了,DMA1CH0的寄存器两个有几处不同
其中最大的不同就是CH0M0ADDR,也就是存放ADC转换的数组ADC_ConvertedValue的地址不同了
而0x10000000是TCMSRAM的区域。正好前段时间因为LCD优化请教过别人,TCMSRAM是无法配置DMA的。从下图可以看出来,TCMSRAM只有DBUS总线,并没有DMA的总线连接。
把用到DMA搬运的文件都手动定义到普通SRAM里,问题迎刃而解,即使开启-O3程序也能跑了(o)/!
第3个问题还是在群里问大神才知道。
这个选项默认情况下应该是打开的。我在进行优化等级测试的时候,不知道什么时候把这个选项关掉了,导致代码死活跑不起来了。
然后对比.uvprojx文件发现这个地方有差异,改回来就好了。
作用就是 把程序中未调用的函数给优化掉,不参与编译
新闻资讯
-
关于开展“清朗·优化营商网络环 07-01
-
电竞大神是女生 07-01
-
持续优化营商“软”环境, 培育 07-01
-
神经网络拓扑结构是什么,神经网 07-01
-
代充抖币,信息差项目,一个月搞 07-01
-
抖音极速版最新版下载_3 07-01
-
SEO工作原理及优化解析 07-01
-
关于进一步建立健全涉企服务工作 07-01