打印
[STM8]

求救!IAR UNION STRUCT操作

[复制链接]
3758|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
x181084431|  楼主 | 2010-5-27 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 x181084431 于 2010-5-27 14:10 编辑

谢谢楼下,问题解决了

本人正在编写一个STM8的程序,使用是IAR的编译器!
  昨天出现一个问题,现在还没有解决,特向大家救助!
问题如下:
我定义了一个UNION 结构体如下
typedef union
{
    struct
     {
       unsigned i:1;
       unsigned j:1;
       unsigned k:1;
       unsigned l:1;
       unsigned m:1;
       unsigned n:1;
       unsigned o:1;
       unsigned p:1;
     }IE
   unsigned char  sound;
}SOUND;
SOUND sound;

对sound.IE.i    .....  sound.IE.p    操作都可以
但对sound.sound进行操作无法改变sound.IE.i    .....  sound.IE.p  里的值。

DEBUG时发现sound.IE   sound.sound的地址为0X000040,
但对sound.sound进行操作后sound.sound的地址变更为其它地址,(操作完成后,变回为0X000040),但sound.IE地址和值一直无变更.
后对下列共同体进行测试,一切正常
typedef union
{
   unsigned char  key;
   unsigned char  sound;
}SOUND;
SOUND sound;


现在只能对sound.IE.i    .....  sound.IE.p    单独一个一个操作。由于我程序中这咱结构大多了,若一个一个单独操作,不现实!
请大家帮忙!看看是什么原因,有什么办法解决!或者有什么替代方法!
沙发
voidx| | 2010-5-27 12:05 | 只看该作者
楼主的代码 对sound.sound 可以改变sound.IE.i    .....  sound.IE.p 。

个人联合体/结构体这么写:

typedef union
{
    struct
     {
       unsigned char i:1;
       unsigned char j:1;
       unsigned char k:1;
       unsigned char l:1;
       unsigned char m:1;
       unsigned char n:1;
       unsigned char o:1;
       unsigned char p:1;
     };
   unsigned char  Byte;
}SOUND;
__root volatile SOUND sound;

int main()
{
  sound.i=1;
  sound.j=1;
  
  sound.Byte=~0x03;
         
  while(1);
  return 0;
}

使用特权

评论回复
板凳
x181084431|  楼主 | 2010-5-27 13:44 | 只看该作者
谢谢  ,我先试试

使用特权

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

本版积分规则

0

主题

39

帖子

1

粉丝