Keil C51对C语言的关键词扩展之三: bdata
使用bdata定义的变量即可字寻址,也可比特位寻址。
Keil C51编译器把使用bdata定义的变量放置在8051内部RAM可位寻址区。
bdata定义的变量必须为全局变量,不能在任一函数内部定义bdata类型的变量。
bdata关键词使用方法:
int bdata x1; /* 定义可位寻址的整型变量*/ char bdata bary [4]; /* 定义可位寻址的数组*/
此时,x1,bary均可按比特位寻址。使用sbit关键词定义可操作其任一比特位的变量。
sbit mybit0 = x1 ^ 0; /* x1的比特0*/ sbit mybit15 = x1 ^ 15; /* x1的比特15 */ sbit Ary07 = bary[0] ^ 7; /* bary[0]的比特7*/ sbit Ary37 = bary[3] ^ 7; /* bary[3]的比特7 */
调用其他源文件中定义的sbit变量,以如下方式声明:
extern bit mybit0; extern bit mybit15; extern bit Ary07; extern bit Ary37;
操作bdata声明的对象,方式如下:
Ary37 = 0; /* 对bary[3]的比特7清零*/ bary[3] = "a"; /* bary[3]直接赋值*/ x1 = -1; /* x1直接赋值 */ mybit15 = 1; /* 对x1的比特15置一*/
也可声明结构体和联合体的sbit变量,示例:
union lft { float mf; long ml; }; bdata struct bad /*注意 bdata*/ { char m1; union lft u; } tcp; /*注意tcp位于位寻址区*/ sbit tcpf31 = tcp.u.ml ^ 31; sbit tcpm10 = tcp.m1 ^ 0; sbit tcpm17 = tcp.m1 ^ 7;须要注意的是,使用sbit定义针对非bdata类型变量的某一比特位,毫无意义。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 动态链接库中与地址无关代码(PIC)对于地址引用的处理
- 下一篇: 动态链接及其部分实现细节