对一个全局变量和一个局部变量位操作,简单的置1,不知道下面程序问题出在哪里?
#include /* for EnableInterrupts macro */
#include /* include peripheral declarations */
#define BIT(a,b) (((vbitfield *)(a))->bit##b)
typedef volatile struct{
volatile unsigned int bit0 : 1;
volatile unsigned int bit1 : 1;
volatile unsigned int bit2 : 1;
volatile unsigned int bit3 : 1;
volatile unsigned int bit4 : 1;
volatile unsigned int bit5 : 1;
volatile unsigned int bit6 : 1;
volatile unsigned int bit7 : 1;
} vbitfield;
uchar flag;
#define flag_bit7 BIT(flag,7) //定义变量flag的第七位
#define i_bit7 BIT(i,7)
void main(void) {
uchar i;
DisableInterrupts;
CONFIG1=0x01;
CONFIG2=0x00;
DDRA=0x02;
PTAPUE=0x00;
PTA=0x7f;
DDRB=0x0f;
PTB=0x00;
DDRD=0xfb;
PDCR=0;
PTD=0xf8;
i=0x00;
i_bit7=1;
flag=0x00;
flag_bit7=1;
while(1){
};
}
对该程序进行编译仿真后,发现c语言程序中(i_bit7=1)以及(flag_bit7=1)汇编出来的程序有了变化:都变为BSET 7,0x00
怎么地址都变为0x00了?
程序执行后结果就不对了,i=0,flag=0。
请问:对变量进行位操作不能这样进行吗?一般的方法是怎么样的?
谢谢!!!! |