OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4226|回复: 1

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

[复制链接]

69

主题

289

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1294
金钱
1294
注册时间
2013-3-14
在线时间
62 小时
发表于 2015-1-8 19:16:02 | 显示全部楼层 |阅读模式
5金钱
下午使用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上就两种方式都可以,这到底是什么情况?有谁可以去验证一下,看看是什么问题么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2015-1-8 22:17:35 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-30 06:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表