百胜招聘 网站开发,网页分为哪几种类型,流行网站开发工具,网站实名认证在哪1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、data区内最好放局部变量。 因为局部变量的空间是可以覆盖的#xff08;某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖#xff09;,可以提高内…1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、data区内最好放局部变量。 因为局部变量的空间是可以覆盖的某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖,可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 3、确保你的程序中没有未调用的函数。 在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。 4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。 在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16128个逻辑变量。定义方法是bdatabit LedState;但位类型不能用在数组和结构体中。 5、其他不频繁用到和对运算速度要求不高的变量都放到xdata区。 6、如果想节省data空间就必须用large模式,将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。 7、当使用到指针时,要指定指针指向的内存类型。 在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为char data *p;。还可指定指针本身的存放内存类型,如char data * xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。 单片机初学者一般对c51语言里的DATA,XDATA,BDATA,IDATA,CODE不是很清楚因为在微机的c语言里根本没有这些东西一下子出来难以让人接受特别是没有硬件基本的朋友们.这也是写程序的时候经常犯错误的地方。请看下表 普通51系列单片机存储空间资源分配情况 空间名称 地址范围 说明 DATAD:00H~7FH片内RAM直接寻址区BDATAD:20H~2FH片内RAM位寻址区IDATAI:00H~FFH片内RAM间接寻址区XDATAX:0000H~FFFFH64K片外RAM数据区CODEC:0000H~FFFFH64K片内外ROM代码区BANK0~BANK31B0:0000H~FFFFH : : B31:0000H~FFFFH分组代码区最大可扩展32X64KB ROM下表是新型80C51单片机扩展空间的分配情况 空间名称 地址范围 说明 DATAD:00H~7FH片内RAM直接寻址区BDATAD:20H~2FH片内RAM位寻址区IDATAI:00H~FFH片内RAM间接寻址区XDATAX:0000H~FFFFH64KB常规片外RAM数据区HDATAX:0000H~FFFFFFH16MB扩展片外RAM数据区CODEC:0000H~FFFFH64K常规片内外ROM代码区HCONST(ECODE)C:0000H~FFFFFFH16MB扩展片外ROM常数区(对Dallas390可用作代码区)BANK0~BANK31B0:0000H~FFFFH : : B31:0000H~FFFFH分组代码区最大可扩展32X64KB ROM单片机中关键字data,idata,xdata,pdata的区别data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 idata: 固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为mox ACC,Rx.(不重要的补充c中idata做指针式的访问效果很好)xdata: 外 部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。 startup.a51的作用 和 汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx100