keil c51 关键字

一:KeilCx51扩展的关键字:

at •alien •bdata •bit •code •compac •data

•far •idata •interrupt •large •pdata •priority •reentrant

•sbit •sfr •sfr16 •small •task •using •xdata
二:C51扩展关键字说明

1、_at_定义变量的绝对地址

格式:<[>memory_type<]>type variable_name_at_constant;

例:int xdata value_at_0x8000;/int at xdata 0x8000/

2、alien (PL/M-51)函数外部声明

C函数调用PL/M-51必须先用alien声明

例:extern alien char plm_func (int,char);

char c_func (void){
int i;

char c;

for(i=0;i<100;i++){
c=plm_func(i,c); /callPL/Mfunc/

}

return©;

}

C函数要被PL/M-51调用必须先用alien声明

例:alien char c_func(char a,int b) {
return(a*b);

}

3、Code data, bdata, pdata, idata, xdata C51存储器类型声明

Code 程序代码存储区

Data 直接寻址片内数据存储区(低128字节)

Bdata 位寻址片内数据存储区(16字节)

Idata 间接寻址片内数据存储区(256字节)

Pdata 分页寻址外部数据存储区(256字节)

Xdata 可寻址片外数据存储区(64KB)

例:int bdata ibase; /Bit-addressable int/

char bdata bary[4]; /Bit-addressablearray/

4、bit位变量定义

格式:bit name<[>=value<]>;

例:static bit done_flag=0; /bitvariable/

5、sfr sfr16 sbit C51扩展数据类型

sfr 用于定义8位特殊功能寄存器

sfr16 用于定义16位特殊功能寄存器

sbit 用于定义可位寻址对象

例:sfr P0=0x80; /Port-0, address 80h/

sfr16 T2=0xCC; /Timer2: T2L 0CCh, T2H 0CDh/

sbit EA=0xAF; //将位绝对地址赋給位变量

sfr PSW=0xD0; sbit OV=PSW^2; sbit OV=0xD0^2;

int bdata ibase; /Bit-addressableint/

sbit mybit0=ibase^0; /bit0ofibase/

6、compact,large,smallC51中变量的存储模式选择

Small模式用于将所有未指明存储区的变量均保存在data存储区

compact模式用于将所有未指明存储区的变量均保存在pdata存储区

Large模式用于将所有未指明存储区的变量均保存在xdata存储区

例:#pragmasmall /Defaulttosmallmodel/

extern int calc(char i, int b) large reentrant;

extern int func(int i,float f) large;

extern void*tcp(char xdata *xp, int ndx) compact;

int mtest(int i,int y) /Smallmodel/

{ return(iy+yi+func(-1,4.75)); }

int large_func(int i,int k) large /Largemodel/

{ return(mtest(i, k)+2); }

7、far far存储区是指许多新的8051扩展地址空间。CX51编译器使用通用的3个字节的指针来访问扩展内存空间。两个CX51的内存类型far and far const,访问扩展RAM空间的变量和扩展ROM空间中的常量。

R3 Value Memory Type Memory Class Address Range 0x00 data/idataDATA/IDATAI:0x00-I:0xFF

0x01xdataXDATAX:0x0000-X:0xFFFF

0x02-0x7Ffar HDATA X:0x010000-X:0x7E0000

0x80unused

0x81-0xFDfarconst HCONST

C:0x800000-C:0xFC0000(farconstismappedintothebankedmemoryareas)

0xFE pdataXDATAone256-bytepageinXDATAmemory

0xFF code CODE/ CONST C:0x0000-C:0xFFFF

8、interruptC51使用interruptm修饰符可将函数转化为中断函数m为中断向量优先级。

例:unsigned int interruptcnt;

unsigned char second;

void timer0 (void) interrupt 1 using2{
if (++interruptcnt==4000) { /countto4000/

second++; /secondcounter/

interruptcnt=0; /clearintcounter/

}

}

9、_task_与_priority_CX51编译器使用_task_和_priority_支持RTX51Full和RTX51 Tiny的实时多任务操作系统。

_task_关键字指定一个函数是一个实时的任务。

_priority_关键字指定任务的优先级。

例:void func(void)_task_num_priority_pri

10、reentrant 重入函数修饰符。所谓重入函数就是允许被嵌套调用的函数。

通常情况下,C51的功能不能被嵌套调用。因为,函数参数和局部变量都存储在固定的内存位置。函数的递归调用使用相同的内存位置。而且,在这种情况下,参数和数据得到损坏。

例:int calc (char i,int b) reentrant

{ int x; x=table[i]; return(x*b); }

11、using定义函数时用来选择函数使用寄存器的分组组

例:void rb_function (void)using 3

{…}
————————————————
版权声明:本文为CSDN博主「zhouhailiang2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhouhailiang1991/article/details/85291244

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值