单片机_C51

来源:互联网 发布:c语言内存泄漏 编辑:程序博客网 时间:2024/04/28 14:21

1.bit位标量  不是0就是1。

2.sbit P1_1 = Ox91; //这样是把位的绝对地址赋给位变量.同sfr 一样sbit 的位地址必须位于80H-FFH 之间.

用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。如先前我们定义了
sfr P1 = 0x90; //因P1端口的寄存器是可位寻址的,所以我们可以定义
sbit P1_1 = P1^1; //P1_1为P1中的P1.1引脚
//同样我们可以用P1.1的地址去写,如sbit P1_1 = 0x91;

3.sfr特殊功能寄存器是一种扩充数据类型、sfr P1 = 0x90; //定义P1 I/O 口,其地址90H

T2 定时器,可以定义为: sfr16 T2 = 0xCC; //这里定义8052 定时器2,地址为T2L=CCH,T2H=CDH

等号后面是它的低位地址,高位地址一定要位于物理低位地址之上.注意的是不能用于定时器0 和1 的定义.。

4.volatile:变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错

内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。

编译器优化常用的方法有:将内存变量缓存到寄存器;由于访问寄存器的速度快于访内存,所以编译器一般 都会作优化以减少访内存。

如果变量加上volatile修饰,则编译器就不会对此变量的读写操作进行优化,即不通过寄存器缓冲而直接访内存。

该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程,

对于C编译器来说,它并不知道这个值会被其他线程修改。自然就把它cache在寄存器里面。编译器是没有线程概念的

volatile 的本意是指:这个值可能会在当前线程外部被改变。


0 0
原创粉丝点击