历史上的今天
今天是:2025年06月29日(星期日)
2021年06月29日 | 不同内存空间定义变量在51单片机编程中的注意事项
2021-06-29 来源:eefocus
不同内存空间(data xdata bdata)定义变量在51单片机编程中的注意事项
减小字体 增大字体 1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。
2、data区内最好放局部变量。
因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同
3、确保你的程序中没有未调用的函数。
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。
4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。
在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。定义方法是: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语言里根本没有这些东西,一下子出来难以让人接受,特别是没有硬件基本的朋友们.这也是写程序的时候经常犯错误的地方。
史海拾趣
|
·单字节单周期指令: 单字节单周期指令只进行一次读指令操作,当第二个ALE信号有效时,PC并不加1,那么读出的还是原指令,属于一次无效的读操作。 ·双字节单周期指令: 这 ...… 查看全部问答> |
|
= _T(\"searchlist.bat\"); //执行DOS命令 TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...… 查看全部问答> |
|
关于做RAID5 的问题,懂这方面的高手帮我一下,很急的一个问题!!! 我要在dell 2600 服务器上做RAID5 ,现在要加入三块硬盘,请问如何来做RAID5???? 1、这三块硬盘加入服务器中,有特殊的要求,与普通PC机器加入硬盘一样吗??? 2、该服务器支持做RAID5吗?,比如需要什么硬件,有什么要特别关注的地方?? ...… 查看全部问答> |
|
这是一个库函数配制的头文件,不要用到的外设可以将define注释掉,如 #define _CAN 不要用can模块就可以将它注释掉 //#define _CAN 这样库在编译的时候就不会编译与can相关的头文件 不同的工程用到的资源是不一样的,因此stm32f10x_conf. ...… 查看全部问答> |
|
请各位大侠给指点一下: 我在用MSP430做一个智能温度控制器,现在P1口连接着一个4X4的键盘,只要一按键就进入中断,我希望在中断里改变一个全局变量的值,可是不知道为什么这个值怎么都带不出来。请各位高人指点一二。… 查看全部问答> |
|
今天抽点时间上第七题: 你知道哪些常用的逻辑电平?TTL与CMOS电平可以直接互连吗? 常用逻辑电平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Couple Logic)、PECL(PSEUDO/POSITIVE EMITTER COUPLED LOGIC)、LVDS(LOW voltage differential sign ...… 查看全部问答> |




