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。 |