下午使用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上就两种方式都可以,这到底是什么情况?有谁可以去验证一下,看看是什么问题么?
|