#define low_data P2^0|P2^1<<1|P2^2<<2|P2^3<<3|P2^4<<4|P2^5<<5|P2^6<<6|P2^7<<7
请问low_data 与 P2 有什么区别?
这句话的意思是,当你在程序中出现low_data时,将用P2^0|P2^1<<1|P2^2<<2|P2^3<<3|P2^4<<4|P2^5<<5|P2^6<<6|P2^7<<7
替换掉。。。
Bit in illegal memory-space:
Definitions of bit scalars may contain the optional memory type data. If the memory type is missing then the type data is assumed, because bits always reside in the internal data memory. This error can occur when an attempt is made to use another data type with a bit scalar definition.
可能是移植性方面的考虑,有的P2不只8位的话用low_data 就可以代表所有P2的低8位了,猜测而已
在51系统下,P2肯定是8bit。但是low_data 有可能是16bit或者更大。要看你使用的表达式。
low_data 应该等于P2输出的十进制值。二进制的数转换为10进制就是这么换的。个人理解,仅供参考。
单就这行代码来看,low_data和P2是等价的。P2^*是典型的位变量形式(51单片机)
假设P2=0xff
那么 low_data = (1) |(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
引用: 引用 12 楼 peasant_lee 的回复:
在51系统下,P2肯定是8bit。但是low_data 有可能是16bit或者更大。要看你使用的表达式。
是51系统, 我在前面加一个(uchar)low_data,这样等价了吗?
sbit b0 =P2^0;
sbit b1 =P2^1;
sbit b2 =P2^2;
sbit b3 =P2^3;
sbit b4 =P2^4;
sbit b5 =P2^5;
sbit b6 =P2^6;
sbit b7 =P2^7;
typedef union {
uchar char_p2;
struct {
uchar b0 :1;
uchar b1 :1;
uchar b2 :1;
uchar b3 :1;
uchar b4 :1;
uchar b5 :1;
uchar b6 :1;
uchar b7 :1; //The high bit.
} bits;
}P2_correct;
P2_correct p22;
p22.charar_p2 与 P2, low_data又有什么关系呢?