打印

keil c位域联合体 优化

[复制链接]
4202|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wen_hau|  楼主 | 2013-5-19 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef union
{
   struct {
           //PS2标志
                 BYTE BIT0:1;                 //
                 BYTE BIT1:1;                 //使能
                 BYTE BIT2:1;                 //
                 BYTE BIT3:1;                 //奇偶校验
                 BYTE BIT4:1;                 //
                 BYTE BIT5:1;                 //
                 BYTE BIT6:1;                 //
                 BYTE BIT7:1;                 //

                  } ps2_bool_bit;
   UINT8   ps2_c_flag;
}UNPS2C ;
extern   UNPS2C      BDATA   unps2c;

#define  scaling_f       unps2c.ps2_bool_bit.BIT0
#define  ps2_enable      unps2c.ps2_bool_bit.BIT1
#define  ps2_mode        unps2c.ps2_bool_bit.BIT2
#define  ps2_parity      unps2c.ps2_bool_bit.BIT3
#define  ps2_rx_resolu   unps2c.ps2_bool_bit.BIT4
#define  ps2_rx_samle    unps2c.ps2_bool_bit.BIT5
#define  ps2_id1         unps2c.ps2_bool_bit.BIT6
#define  ps2_id2         unps2c.ps2_bool_bit.BIT7

#define  ps2_bool        unps2c.ps2_c_flag

这是我定义位段  程序里DEBUG后

    45:     }while(ps2_enable==0);    //是否PS2枚举成功
C:0x09A1    AF22     MOV      R7,unps2c(0x22)
C:0x09A3    EF       MOV      A,R7
C:0x09A4    C3       CLR      C
C:0x09A5    13       RRC      A
C:0x09A6    30E0EA   JNB      0xE0.0,C:0993

编译器总是把变量赋值给ACC,然后再把标志移位到ACC的最低位 ACC.0然后判断,这样很浪费指令,请教高手有什么办法优化吗?

我 第一次用keil c和8051核的芯片编写  不太熟,以前一直用精简指令的IC。

相关帖子

沙发
mcu5i51| | 2013-5-19 15:14 | 只看该作者
好像结构体优化不够,自己定义位段变量和位变量操作就好了

使用特权

评论回复
板凳
wen_hau|  楼主 | 2013-5-19 15:35 | 只看该作者
mcu5i51 发表于 2013-5-19 15:14
好像结构体优化不够,自己定义位段变量和位变量操作就好了

不太明白你的意思?能说明下具体怎么改吗?

使用特权

评论回复
地板
airwill| | 2013-5-19 16:02 | 只看该作者
用 BDATA 区存储区, 并用 sbit 定义位变量
或者直接用 bit 定义变量.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
wen_hau + 1 谢谢!
5
wen_hau|  楼主 | 2013-5-19 16:43 | 只看该作者
airwill 发表于 2013-5-19 16:02
用 BDATA 区存储区, 并用 sbit 定义位变量
或者直接用 bit 定义变量.

谢谢 我知道怎么做了 :)

使用特权

评论回复
6
pang7| | 2013-5-20 11:17 | 只看该作者
51慎用这种位域操作 直接sbit吧

使用特权

评论回复
7
zuixin2005| | 2013-5-20 12:26 | 只看该作者
哇塞,都是高手

使用特权

评论回复
8
wen_hau|  楼主 | 2013-5-20 12:39 | 只看该作者
怎么结贴呀?新人

使用特权

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

本版积分规则

7

主题

21

帖子

1

粉丝