打印
[AVR单片机]

IAR中结构体的内存地址的付给地址指针

[复制链接]
2781|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rafd|  楼主 | 2007-6-24 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
struct fff
{
 unsigned char a3;
unsigned char a2;
unsigned char a1;
unsigned char a0;
}dd;
int main(void)
{
   unsigned long *hh;
   dd.a3 = 0x12;
   dd.a2 = 0x34;
   dd.a1 = 0x56;
   dd.a0 = 0x78;
   hh = ⅆ
}
hh = ⅆ这句为什么在IAR中会出错,而在CV中却可以,我在网上找到的列子也都是可以的

相关帖子

沙发
rafd|  楼主 | 2007-6-24 21:33 | 只看该作者

已解决

union
{
    unsigned long s_windows_jgt;
    struct 
    {
        unsigned long data_a0:8;
        unsigned long data_a1:8;
        unsigned long data_a2:8;
        unsigned long data_a3:8;   
    };
};

使用特权

评论回复
板凳
maomao40| | 2007-6-25 09:20 | 只看该作者

呵呵...自投自抢:)

使用特权

评论回复
地板
xiao| | 2007-6-25 12:06 | 只看该作者

这样

hh=(unsigned long *)ⅆ
呵呵。

使用特权

评论回复
5
rafd|  楼主 | 2007-6-26 05:44 | 只看该作者

只用结构体,代码少很多

编译AVR,联合加结果体的,data_a0 = *s_windows_sjdz;需要23条指令,
而只用结构体的,dd.data_a0 = *s_windows_sjdz;只用1条指令

使用特权

评论回复
6
rafd|  楼主 | 2007-6-26 05:56 | 只看该作者

写错了dd.data_a0 = *s_windows_sjdz;是3条

使用特权

评论回复
7
rafd|  楼主 | 2007-6-26 06:00 | 只看该作者

开始我也是过hh=(long)(&dd);拉了地址符号*

使用特权

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

本版积分规则

29

主题

85

帖子

0

粉丝