51编程中位域和bit关键字
时间:10-02
整理:3721RD
点击:
在keil C51中,提供了bdata关键字,用法:
bdata Flag=0x00;
sbit Flag_0=Flag^0;
sbit Flag_1=Flag^1;
sbit Flag_2=Flag^2;
。
可以实现 位 操作。
另一种方法:
union
{
uint8 Flag;
struct
{
uint8 Flag_0:1;
uint8 Flag_0:1;
uint8 Flag_0:1;
。
}
}FlagType;
问题:
1、这两种的效果是一样的,但是本质上(机器实现)有没有什么区别?
2、就使用来说,第二种(面向对象的风格)要方便很多,一个寄存器对象以及该寄存器下的每个位,关系明确,引用方便。但51的头文件都用的sbit的方式,而不是第二种,这里面是不是有什么风险、隐患或者讲究?
bdata Flag=0x00;
sbit Flag_0=Flag^0;
sbit Flag_1=Flag^1;
sbit Flag_2=Flag^2;
。
可以实现 位 操作。
另一种方法:
union
{
uint8 Flag;
struct
{
uint8 Flag_0:1;
uint8 Flag_0:1;
uint8 Flag_0:1;
。
}
}FlagType;
问题:
1、这两种的效果是一样的,但是本质上(机器实现)有没有什么区别?
2、就使用来说,第二种(面向对象的风格)要方便很多,一个寄存器对象以及该寄存器下的每个位,关系明确,引用方便。但51的头文件都用的sbit的方式,而不是第二种,这里面是不是有什么风险、隐患或者讲究?
SBIT 只适合51 其他单片机用不了的 很多单片机没有位操作 另一个基本通用
1.这是两种实现方法,汇编实现据我所知没有区别.
2.因为你这个是51编译环境,还有sbit关键字,到了ARM或者其他很多类型的编译环境是没有这个关键字的.为了后续发展,推荐使用第二种方法.
ヾ(???ヾ)^?啊咧