13 12
发新话题
打印

中断的使用

本主题由 亲善大使 于 2008-8-23 04:38 审核通过
看了你们的讨论,学了不少东西,呵呵....
感触良多,谢谢两位!

又总结了一点东西




变量的存储类型:

外部变量

内部变量

在所有函数之前定义的变量
在某个函数内定义的变量
全局变量
Global
开辟内存空间后自始至终都存在
其他文件需访问用extern声明
动态变量
Auto
先用先开辟,用完之后不保存
没有记忆
全局静态变量
Static
开辟内存空间后自始至终都存在
不同的是,
对于global,其他文件还可以访问
对于static,退出被定义文件后,值仍存在,但其他文件不可以访问
局部静态变量
Static
开辟内存空间后自始至终都存在
值保留,只有被定义函数可以访问,其他函数不能访问
寄存器变量
Register
作用范围同auto型变量
用于使用频率高的变量
但通用寄存器个数很有限,应慎用


Keil Cx51编译器还扩展了变量的数据类型:bit, sbit, sfr, sfr16

Keil Cx51还允许说明存储器类型:
存储器类型
说明
DATA
直接寻址的片内RAM128B),访问速度最快
BDATA
可位寻址的片内RAM16B
IDATA
间接访问的片内RAM256B
PDATA
分页寻址的片外RAM,(256BMOVX @Ri指令
XDATA
片外RAM64KB),MOVX @DPTR指令
CODE
ROMMOVC指令


这样,一个变量的属性就变成了三个:
存储类型  数据类型  存储器类型  变量名;
那么,我就有了这样的理解:
变量——等价于一个存储单元;
存储类型——规定了这个存储单元存在的时间;
数据类型——规定了这个存储单元的长度;
存储器类型——规定了这个存储单元的大概位置;
如果这个位置还要更精确一些,为了便于进行下一步的操作,还可以指定变量的绝对地址。
这样好像就有了一种立体感。


不过还想再问几个问题:

1、
越来越觉得编译器太神奇了,竟然能够进行翻译!一种用人脑来完成都要动脑筋的东西~~究竟是如何实现的?如果要了解的话是不是应该看编译看编译原理方面的书籍?

2、为什么通用寄存器的存取速度快?在结构上它和其他存储器比如内存有什么区别呢?
恩,也恩,把这些问题也提给自己,以后慢慢解决。自己的一点点理解,希望得到大家的指正,谢谢


 13 12
发新话题