[AVR单片机] gcc不同优化级别,出现不同问题

[复制链接]
4361|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中看到这么高级的应用,如果没有特殊需要还是建议就不要折腾编译器了

也许用词不妥,不过想破脑袋也没有弄懂这么用有什么好处和优点,请明示
ATmega16 发表于 2007-12-27 13:19 | 显示全部楼层

r20换成 r2-r17

register unsigned char a asm("r20");

中的r20换成r2-r17
 楼主| muslimsali 发表于 2007-12-28 14:26 | 显示全部楼层

为了写操作系统

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


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


但还是要谢谢你们的关注
 楼主| muslimsali 发表于 2007-12-28 14:29 | 显示全部楼层

哈哈,重装了软件,好了

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

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

哈哈,怪了,总之,不追究什么原因了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

115

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部