打印
[AVR单片机]

gcc不同优化级别,出现不同问题

[复制链接]
3489|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
muslimsali|  楼主 | 2007-12-26 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


在gcc+avrstudio
中编耄?
#include <avr/io.h>
unsigned char add(unsigned char b,unsigned char c,unsigned char d)
{
return b+c*d;
}
register unsigned char a asm("r20"); //将r20 定义为 变量a
int main(void)
{
while(1)
{
a++;
PORTB=add(a,a,a);
}
}


优化级别选为01,02,03,0s都没有问题,能够正常编译
但是调为00的时候就会报错:
../rtos_tmp2.c:6: error: global register variable follows a function definition
问题出在这个语句上:
register unsigned char a asm("r20"); //将r20 定义为 变量a


望有人能给个解释,期待中! 
 

相关帖子

沙发
muslimsali|  楼主 | 2007-12-26 15:13 | 只看该作者

gcc不同优化级别,出现不同问题

回车一下就成上面那样了

在gcc+avrstudio
中编译:
#include <avr/io.h>
unsigned char add(unsigned char b,unsigned char c,unsigned char d)
{
return b+c*d;
}
register unsigned char a asm("r20"); //将r20 定义为 变量a
int main(void)
{
while(1)
{
a++;
PORTB=add(a,a,a);
}
}


优化级别选为01,02,03,0s都没有问题,能够正常编译
但是调为00的时候就会报错:
../rtos_tmp2.c:6: error: global register variable follows a function definition
问题出在这个语句上:
register unsigned char a asm("r20"); //将r20 定义为 变量a


望有人能给个解释,期待中!

使用特权

评论回复
板凳
muslimsali|  楼主 | 2007-12-27 09:09 | 只看该作者

继续提问中

使用特权

评论回复
地板
dai_weis| | 2007-12-27 09:17 | 只看该作者

这句做什么用?

register unsigned char a asm("r20"); //将r20 定义为 变量a

很难得在C中看到这么高级的应用,如果没有特殊需要还是建议就不要折腾编译器了

也许用词不妥,不过想破脑袋也没有弄懂这么用有什么好处和优点,请明示

使用特权

评论回复
5
ATmega16| | 2007-12-27 13:19 | 只看该作者

r20换成 r2-r17

register unsigned char a asm("r20");

中的r20换成r2-r17

使用特权

评论回复
6
muslimsali|  楼主 | 2007-12-28 14:26 | 只看该作者

为了写操作系统

回4楼:
为了写操作系统,呵呵,保护  r2   不要被编译器用到,我可不想写出来的操作系统编译通不通过去依赖与优化级别,呵呵


回五楼:
我的目的就是为了让编译器不要用 r20,呵呵,这样改了就是对了也没意义。呵呵


但还是要谢谢你们的关注

使用特权

评论回复
7
muslimsali|  楼主 | 2007-12-28 14:29 | 只看该作者

哈哈,重装了软件,好了

晕,昨天重装了系统,今天又重新装了一下软件,呵呵
没有出现问题了,哈哈,

晕,难道是我现在的xp操作系统盗版的好

哈哈,怪了,总之,不追究什么原因了!

使用特权

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

本版积分规则

35

主题

115

帖子

0

粉丝