打印
[技术问答]

什么是bit和sbit?他们有什么区别?

[复制链接]
1665|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangcunxiake|  楼主 | 2018-12-7 09:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

问题:什么是bit和sbit?他们有什么区别?

  bit : 编译时分配空间

       sbit 只能在外部定义全局变量。

       sfr(特殊功能寄存器)的bit。SFR是系统指定的内存地址。

  bit 动态分配的,有编译器来指定内存地址。

  bit和sbit都是C51扩展的变量类型。

  sbit 要在最外面定义,就是说必须定义成外部变量.sbit定义的是SFR(特殊功能寄存器)的bit

  sbit更像是类型定义,不像是变量定义。

  sbit: 指示说明性说明

  bit 可以在外部或内部定义。


  bit和int char之类的差不多,只不过char=8位, bit="1位而已"。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。


  bit是编译器在的可寻址区分配的一个位变量,是不定的,不是绝对地址目标。

  所有可位寻址的位都可由sbit指定,这包括可位寻址区和SFR中的位。

  sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

  sbit位寄存器是可位寻址的绝对地址目标,定义后编译器是不会改变位置的。


沙发
huangcunxiake|  楼主 | 2018-12-7 09:08 | 只看该作者
是C51里的(单片机的C扩展的)
bit  是变量类型,相当于boot 只占一个位,最多可定128个bit变量
sbit 是给可位寻址的变量(或特殊功能寄存器)的某一个位定个别名,不另占空间
如:
bit YesOrNo;        //定义bit型变量 占用bdata区的一个位
sbit P0_1 = P0^1;  //申明一个引用名 P0_1  指向端口P0的1号接脚,不会额外分配空间

使用特权

评论回复
板凳
yiyigirl2014| | 2018-12-7 12:24 | 只看该作者
这个只在51里见过,ARM是不用这个的。

使用特权

评论回复
地板
yiyigirl2014| | 2018-12-7 12:24 | 只看该作者
ARM用BIT应该可以。

使用特权

评论回复
5
zhuotuzi| | 2018-12-7 14:42 | 只看该作者
定义位的,在51是真实的bit

使用特权

评论回复
6
zhuotuzi| | 2018-12-7 14:42 | 只看该作者
类似布尔变量只有一个位

使用特权

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

本版积分规则

189

主题

3407

帖子

9

粉丝