打印
[AVR单片机]

变态的AVR-GCC优化!!!

[复制链接]
4445|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2010-3-8 08:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这段代码不优化才正常,优化就跑飞!!!谁能分析下为什么?
===============================================
#include <avr/io.h>  

unsigned char ret;
unsigned char Test(unsigned char tmp)  
{  
        if(tmp == 1)  
        {  
                return (1);  
        }  
        else if (tmp == 2)  
        {  
                return (2);  
        }  
        else if (tmp == 3)  
        {  
                return (3);  
        }  
        return (4);  
}
int main()  
{  
        while(1)  
        {  
                ret = Test(1);
                PORTB = ret;
        }         
}

相关帖子

沙发
linhai2009| | 2010-3-8 13:36 | 只看该作者
这么简单的程序就不需要优化了把

使用特权

评论回复
板凳
suoma| | 2010-3-8 20:59 | 只看该作者
怎么优化的?

使用特权

评论回复
地板
lovelyegle| | 2010-3-8 21:18 | 只看该作者
这么短还能优化成什么样?

使用特权

评论回复
5
linhai1986| | 2010-3-8 21:22 | 只看该作者
这个应该不许要优化了吧

使用特权

评论回复
6
juventus9554| | 2010-3-8 22:34 | 只看该作者
这还优化……

使用特权

评论回复
7
vr2whf| | 2010-3-9 00:02 | 只看该作者
优化成这样子吧

#include <avr/io.h>  

unsigned char ret;
int main()  
{  
        while(1)  
        {  
                ret = 1;
                PORTB = ret;
        }         
}

使用特权

评论回复
8
linjing| | 2010-3-9 09:17 | 只看该作者
volatile unsigned char ret;

试试看?!

使用特权

评论回复
9
lianda_| | 2010-3-10 12:05 | 只看该作者
这是全部程序吗?

使用特权

评论回复
10
麻辣鸭脖子| | 2010-3-10 23:22 | 只看该作者
ret = Test(1); tmp一直是1啊。
else if (tmp == 2)  
        {  
                return (2);  
        }  
        else if (tmp == 3)  
        {  
                return (3);  
        }  
        return (4);  
这些不就没用了吗?

使用特权

评论回复
11
laslison| | 2010-3-13 10:57 | 只看该作者
那就是7楼的优化方式了,有冗余的程序

使用特权

评论回复
12
麻辣鸭脖子| | 2010-3-13 22:45 | 只看该作者
:P

使用特权

评论回复
13
Karlshen| | 2010-3-13 23:04 | 只看该作者
楼主发了贴就跑了啊

使用特权

评论回复
14
易达口香糖| | 2010-3-14 00:23 | 只看该作者
急寻楼主,解决方法是啥

使用特权

评论回复
15
HonMe| | 2010-3-14 16:20 | 只看该作者
不知道为什么,我也出了这样的问题

使用特权

评论回复
16
voidx| | 2010-3-15 12:42 | 只看该作者
直接优化成:
while(1)
{
   PORTB = 1;
}

GCC优化在这里没有任何问题。

使用特权

评论回复
17
huamunv| | 2010-3-15 21:20 | 只看该作者
直接优化成:
while(1)
{
   PORTB = 1;
}

GCC优化在这里没有任何问题。
voidx 发表于 2010-3-15 12:42


这样优化也看不出哪里不对了

使用特权

评论回复
18
午夜粪车| | 2010-3-15 21:21 | 只看该作者
这样优化也看不出哪里不对了
huamunv 发表于 2010-3-15 21:20
;P

使用特权

评论回复
19
hsb.siq| | 2010-3-16 00:54 | 只看该作者
顶一下,那位高手能说说这个优化,
我也碰到这个问题,第一次用AVR M169,因为刚开始试的时候,一优化把程序里面的延时刷掉了,现在16K程序区快用完了,哪位高手能说说优化对程序有没影响。

使用特权

评论回复
20
457878|  楼主 | 2010-3-16 08:51 | 只看该作者
值得说一下的是,我在工作中用到的代码都运行正常......
可见,编译器能分辨你是在工作还是在儿戏......

使用特权

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

本版积分规则

268

主题

876

帖子

3

粉丝