打印

【讨论】编译器优化选项

[复制链接]
5625|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原野之狼|  楼主 | 2009-9-18 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
无论是使用KEIL,还是使用AVR-GCC,我一般是让编译器不做优化的,因为,开了优化会带来各种莫名其妙的问题,这些问题我一直没有认真的去总结过,所以在此发帖,希望各位把自己的经验讲讲。

相关帖子

沙发
一朝成名| | 2009-9-18 19:24 | 只看该作者
keil用到6级,基本没啥情况~

使用特权

评论回复
板凳
aozima| | 2009-9-18 20:13 | 只看该作者
从来都使用最高级优化.....(发布的程序)

调试阶段有选择的使用不同的优化等级

"因为,开了优化会带来各种莫名其妙的问题"
自己写得不规范带来的问题吧

使用特权

评论回复
地板
zyok| | 2009-9-18 20:15 | 只看该作者
keil俺一般也用最高级的优化...

使用特权

评论回复
5
原野之狼|  楼主 | 2009-9-18 21:08 | 只看该作者
请教三楼 怎么样写才算是规范呢 这个问题确实困扰我比较久了。

使用特权

评论回复
6
Simon21ic| | 2009-9-19 02:57 | 只看该作者
IAR AVR -- 最高速度优化,编译出来的代码占用的空间比最高空间优化还小
IAR ARM -- 最高空间优化
只有某些非常特殊的情况下,才会用低优化级别

使用特权

评论回复
7
yewuyi| | 2009-9-19 08:40 | 只看该作者
晕,俺用C的时候,也从来都是最高优化。

怎么才能最规范?

用最基本的用法就很安全。。。

使用特权

评论回复
8
HWM| | 2009-9-19 08:42 | 只看该作者
问题一般都出在你自己不守规矩。

使用特权

评论回复
9
古道热肠| | 2009-9-19 10:01 | 只看该作者
变量声明要注意,C语言优化时会对变量进行考查.除掉无效的操作.对于程序流程控制也会选取最优路径,遇到这种情况,俺只看结果是否相符,仿真时程序难跳转,俺先不去细究.

使用特权

评论回复
10
踢球老越位| | 2009-9-19 10:25 | 只看该作者
一般要监测变量,我都加上volatile这个关键字。

使用特权

评论回复
11
LastNew| | 2009-9-19 10:45 | 只看该作者
林锐博士,满噻

使用特权

评论回复
12
原野之狼|  楼主 | 2009-9-19 11:45 | 只看该作者
楼上几位能不能多说点呢,或者介绍本书看看也行~

使用特权

评论回复
13
xlsbz| | 2009-12-8 18:32 | 只看该作者
弄0级别说明你对你的程序不自信!程序有问题!

我讲九级别的那种编译器 新版本的都是就级别 大概是从 6.0版本开始的 C51.EXE吧
这个我会点!!!我一般用默认的级别!
比如说弄个软件延时
for i = 1 i 《100 i ++ {;}
那么不同级别会有不同的效果 主要是loop rotation 的作用 当然loop rotation 之前和之后的几个级别也能稍微起到作用!

最后的三个级别 7 89 一般是代码大小的 不用太过于关心

有个叫deadcode 消除的!!  

对于没有用的代码keil会自动消除

比如说

带返回的函数
char 函数名A(void)
{
    //代码
       return  100;
}

调用函数的时候 不是   变量  = 函数名A();
而是  函数名A();
若选中该优化级别,那么return 100 就会被认为是死码 被优化掉
如果没有选中该级别,那么编译器就会给出警告

如果你什么都用0级别 那么 关键字 voiliate 就免了  啥情况都不用使用了


那个data 覆盖选项

你可以通过看生成的data xdata显示看看占用了多少内存 就知道 data覆盖的威力了

大概只能想到这鞋了

使用特权

评论回复
14
xlsbz| | 2009-12-8 18:44 | 只看该作者
本帖最后由 xlsbz 于 2009-12-8 18:50 编辑

1# 原野之狼

我印象种高人一般不太关注这些玩意。 所以还是别关注啦  哈哈

看样子 楼主还是个官官啊


楼主看看我 像个人才么?
:loveliness:

使用特权

评论回复
15
xlsbz| | 2009-12-8 19:56 | 只看该作者
本帖最后由 xlsbz 于 2009-12-8 20:00 编辑

5# 原野之狼

规范的程序大概就是你公司里面水平比较不咋地的人都能看懂的程序。

就是说 写程序不是写给自己看的 是为了写给别人看的

所以 这种

*p++ 这种用法请推出历史舞台.

这种*(p ++)
也退出!

*p
p++ 这种好

使用特权

评论回复
16
原野之狼|  楼主 | 2009-12-8 21:56 | 只看该作者
这个帖子都被翻出来了
其实这个问题俺还是没有解决 所以俺还是用0级优化
这个程序我已经好久没去碰了 因为只是实验测试一下
不开优化运行时没有发现问题
但是优化后就会出现问题了 出现的时间还比较随机 有的时候几分钟就出现了 有的时候得几十分钟才出现 所以我没法捕获这个问题的根源
另外回复xlsbz 俺不是什么官官 严格来讲 我现在属于失业人员

使用特权

评论回复
17
xlsbz| | 2009-12-8 22:19 | 只看该作者
这个帖子都被翻出来了
其实这个问题俺还是没有解决 所以俺还是用0级优化
这个程序我已经好久没去碰了 因为只是实验测试一下
不开优化运行时没有发现问题
但是优化后就会出现问题了 出现的时间还比较随机 有的时候几 ...
原野之狼 发表于 2009-12-8 21:56


这么牛?失业?
你的意思是你创业了? 牛!

使用特权

评论回复
18
原野之狼|  楼主 | 2009-12-8 22:58 | 只看该作者
也谈不上创业 帮一朋友忙 先混过这一年再说

使用特权

评论回复
19
王紫豪| | 2009-12-9 09:10 | 只看该作者
我也从来都是最高优化,keilc51 都是 9级,如果通不过,肯定是程序有问题,有的地方不能说是错误,但是至少不太理想。

我总结一句话:要求高点,进步快点。

使用特权

评论回复
20
原野之狼|  楼主 | 2009-12-9 14:04 | 只看该作者
王兄这这个方面肯定经验丰富哦
另 你们的信号发生器做得不错呀 我有看过你们的说明书 呵呵~

使用特权

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

本版积分规则

187

主题

8547

帖子

280

粉丝