打印
[AVR单片机]

求助:GCC如何把一个局部变量放到寄存器里,而不是堆栈?

[复制链接]
3183|4
手机看帖
扫描二维码
随时随地手机跟帖
沙发
平常人| | 2007-4-21 18:40 | 只看该作者

试试使用register的存储指定

没用过GCC,但值得一试。

使用特权

评论回复
板凳
没灵魂| | 2007-4-24 08:47 | 只看该作者

用标准C中的直接寻址的方法,

假设R0 的地址是0x00,R1的地址是0x01
若要R0=123 ,R1=234 则

*(volatile unsigned char *)(0x00)=123  //R0=123
*(volatile unsigned char *)(0x01)=234  //R1=234

使用特权

评论回复
地板
hudaidai| | 2007-4-24 11:10 | 只看该作者

请不要被楼上的办法误导

1. 现代编译器一般都忽略register关键字。但好像gcc有强制register生效的编译选项,可以查下手册。
2. 一般寄存器都不可以直接寻址的,更何况这种方式完全可能破坏编译器对寄存器的使用约定。

其实楼主的问题一般挺简单,只要打开优化-Os或者-O3,使用频繁的变量自然就分配在寄存器中了。

使用特权

评论回复
5
airwill| | 2007-4-24 20:09 | 只看该作者

这个工作, 编译器自动完成啦

倒是有的时候, 为了让程序的效率更高, 会将全局变量指定给特定的寄存器.
方法是:

这样定义变量(status)
register unsigned char status asm("r16");

使用特权

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

本版积分规则

31

主题

59

帖子

0

粉丝