加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C51中的变量定义

(2009-11-21 10:28:45)
标签:

杂谈

C51定义一个变量的格式如下:

【存储种类】数据类型【存储器类型】变量名称

 数据类型和变量名称是必要,其他都是可选项

存储种类

存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类有四种,分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。
1.auto:
     使用auto定义的变量称为自动变量,其作用范围在定义它的函数体或复合语句内部,当定义它的函数体或复合语句执行时,C51才为该变量分配内存空间,结束时占用的内存空间释放。自动变量一般分配在内存的堆栈空间中。定义变量时,如果省略存储种类,则该变量默认为自动(auto)变量。
2.extern:
    使用extern定义的变量称为外部变量。在一个函数体内,要使用一个已在该函数体外或别的程序中定义过的外部变量时,该变量在该函数体内要用extern说明。外部变量被定义后分配固定的内存空间,在程序整个执行时间内都有效,直到程序结束才释放。
3.static:
    使用static定义的变量称为静态变量。它又分为内部静态变量和外部静态变量。在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。
4.register:
       使用register定义的变量称为寄存器变量。它定义的变量存放在CPU内部的寄存器中,处理速度快,但数目少。C51编译器编译时能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声明。

数据类型

1 int

2 float

3 char 如‘a’用单引号

4 字符串常量,由双引号内的字符组成,如“test”,在存储字符串时系统会在字符串的尾部加上\0转义符以作为该字符串的结束,字符串“a”和字符常量'a'是不一样的。

存储器类型与存储区关系

data: 直接可寻址片内数据存储区(128字节)。指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata: 间接可寻址片内数据存储区(259字节)。指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,但两者访问的方式不同。idata是用类似C中的指针方式访问,汇编中语句为:mox ACC,@Rx。(补充:c程序中idata做指针式的访问效果很好)

bdata: 可位寻址片内数据存储区(16字节)。允许进行位和字节混合存取。

xdata片外数据存储区(64K)。外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata: 分页的片外数据存储区(256字节)。外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx进行访问。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

code: 程序存储区(64k)。用MOVC @DPTR进行访问。

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有