发现IAR BUG,好多语法都不支持,不知道是我不会设置编译器,还是真的存在那样的问题

2019-07-19 21:48发布

下午使用IAR FOR stm8 1311使用如下语法
 typedef struct
{
  unsigned K1: 1;
  unsigned K2: 1;
  unsigned K3: 1;
  unsigned K4: 1;
}_KEY_flag;
typedef union
{
  unsigned char Status;
  _KEY_flag     KeyStatus;
}_KEY_S;

extern   _KEY    g_KeyStatus;
extern   _KEY    g_KeyFirstDo;

本来这时,如果我要对g_KeyStatus字节访问,那就对Status变量赋值,因为联合体是共用地址,所以这时K1、K2、K3、K4也会相应的被改变,但是实际仿真却发现Status变化,K1、K2、K3、K4不会变化
而要时K1、K2、K3、K4变化,必须对KeyStatus位访问才行,然后我用KEIL和STVD使用这种语法,就可以。



typedef struct
{
  unsigned K1: 1;
  unsigned K2: 1;
  unsigned K3: 1;
  unsigned K4: 1;
}_KEY_F;
#define  KEY_STATUS      *((unsigned char*)(&g_KeyStatus))
#define  KEY_FIRSTDO     *((unsigned char*)(&g_KeyFirstDo))
extern   _KEY_flag    g_KeyStatus;
extern   _KEY_flag    g_KeyFirstDo;

还有这种方式也不支持,本来访问KEY_STATUS,K1,K2,K3,K4的值也会相应的改变,但是实际仿真发现也不会,我在STVD上就两种方式都可以,这到底是什么情况?有谁可以去验证一下,看看是什么问题么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。