pdata pdata memory 只能用于声明变量,不能用来声明函数,该区域位于 MCU 外部,
采用 8 位地址线进行编码。存储大小限制在 256byte. 是 xdata memory 的低
256byte。为其子集。
使用方法
unsigned char pdata count=0;
bdata bdata memory 只能用于声明变量,不能用来声明函数。该区域位于 8051 内部位
数据地址。定义的量保存在内部位地址空间,可用位指令直接读写。
使用方法:
unsigned char bdata varab=0
注:有些资料讲,定义字符型变量时,在缺省 unsigned 时,字符型变量,默认为
无符号,与标准 C 不同,但我在 Keil uVision3 中测试的时候发现并非如此。
在缺省的情况下默认为有符号。或许在以前的编译器是默认为无符号。所以
看到有的资料上面这样讲的时候,要注意一下,不同的编译器或许不同。所
以我们在写程序的时候,还是乖乖的把 unsigned signed 加上,咱也别偷这个
懒。
2 函数的参数和局部变量的存储模式
C51 编译器允许采用三种存储器模式:SMALL,COMPACT 和 LARGE。一个函
数的存储器模式确定了函数的参数的局部变量在内存中的地址空间。处于
SMALL 模式下的函数参数和局部变量位于 8051 单片机内部 RAM 中,处于
COMPACT 和 LARGE 模式下的函数参数和局部变量则使用单片机外部 RAM。
在定义一个函数时可以明确指定该函数的存储器模式。方法是在形参表列的后
面加上一存储模式。
示例如下:
#pragma large //此预编译必须放在所有头文前面
int func0(char x,y) small;
char func1(int x) large;
int func2(char x);
注:
上面例子在第一行用了一个预编译命令#pragma 它的意思是告诉 c51 编译器在对
程序进行编译时,按该预编译命令后面给出的编译控制指令 LARGE 进行编译,
即本例程序编译时的默认存储模式为 LARGE.随后定义了三个函数,第一个定义
为 SMALL 存储模式,第二个函数定义为 LARGE 第三个函数未指定,在用 C51
进行编译时,只有最后一个函数按 LARGE 存储器模式处理,其它则分别按它们
各自指定的存储器模式处理。
本例说明,C51 编译器允许采用所谓的存储器混合模式,即允许在一个程序中将
一些函数使用一种存储模式,而其它一些则按另一种存储器模式,采用存储器混
合模式编程,可以充分利用 8051 系列单片机中有限的存储器空间,同时还可以
加快程序的执行速度。
评论0
最新资源