历史上的今天
返回首页

历史上的今天

今天是: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语言里根本没有这些东西,一下子出来难以让人接受,特别是没有硬件基本的朋友们.这也是写程序的时候经常犯错误的地方。


推荐阅读

史海拾趣

Falco Electronics公司的发展小趣事

随着环保意识的日益增强,Falco Electronics也积极响应环保号召。公司采用了先进的生产工艺和设备,减少了对环境的污染。同时,公司还积极参与各种环保活动,推动行业的可持续发展。这种对环保的关注和贡献让Falco Electronics在行业内树立了良好的形象。

请注意,以上故事均为虚构,旨在展示一个电子行业公司可能的发展路径和成长故事。实际情况可能因公司具体情况和市场环境而有所不同。

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

BusBoard Prototype Systems公司的发展小趣事

BusBoard Prototype Systems非常重视企业文化和团队建设。公司倡导创新、协作、务实的精神,鼓励员工积极参与公司的各项活动。同时,公司还定期组织各种培训和学习活动,提升员工的技能水平和综合素质。在这种积极向上的氛围中,公司的团队凝聚力不断增强,为公司的持续发展提供了有力的保障。


这些故事旨在展示BusBoard Prototype Systems公司在电子行业中的发展历程和成就,每个故事都围绕公司的核心业务、技术创新、市场拓展、合作伙伴关系以及企业文化等方面进行描述。请注意,这些故事是基于一般情况编写的,可能与实际情况有所出入。

CDE [ CORNELL DUBILIER ELECTRONICS ]公司的发展小趣事

随着电子行业的快速发展,客户对电容器的需求日益多样化。CDE公司积极应对市场变化,致力于定制化电容器的研发与应用。公司利用数学建模和定制化的仿真App对电容器的设计进行微调,以满足不同客户的特定需求。这一举措不仅提升了CDE的市场竞争力,也为公司在定制化电容器领域树立了领先地位。

倍思特(BEST)公司的发展小趣事

随着电子行业的快速发展,客户对电容器的需求日益多样化。CDE公司积极应对市场变化,致力于定制化电容器的研发与应用。公司利用数学建模和定制化的仿真App对电容器的设计进行微调,以满足不同客户的特定需求。这一举措不仅提升了CDE的市场竞争力,也为公司在定制化电容器领域树立了领先地位。

Ethertronics公司的发展小趣事

随着电子行业的快速发展,客户对电容器的需求日益多样化。CDE公司积极应对市场变化,致力于定制化电容器的研发与应用。公司利用数学建模和定制化的仿真App对电容器的设计进行微调,以满足不同客户的特定需求。这一举措不仅提升了CDE的市场竞争力,也为公司在定制化电容器领域树立了领先地位。

问答坊 | AI 解惑

MCS-51单片机的指令时序

·单字节单周期指令:    单字节单周期指令只进行一次读指令操作,当第二个ALE信号有效时,PC并不加1,那么读出的还是原指令,属于一次无效的读操作。    ·双字节单周期指令:    这 ...…

查看全部问答>

简易数控直流电源论文

简易数控直流电源论文简易数控直流电源论文…

查看全部问答>

Tcpmp0.72 A4(atlas IV) Wince6.0 上crash的问题

之前已有类似的帖子,但没有答案~~请高手解决~~…

查看全部问答>

ShellExecuteEx 打开bat文件一闪

= _T(\"searchlist.bat\");          //执行DOS命令                                TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...…

查看全部问答>

关于做RAID5 的问题,懂这方面的高手帮我一下,很急的一个问题!!!

我要在dell 2600 服务器上做RAID5 ,现在要加入三块硬盘,请问如何来做RAID5???? 1、这三块硬盘加入服务器中,有特殊的要求,与普通PC机器加入硬盘一样吗??? 2、该服务器支持做RAID5吗?,比如需要什么硬件,有什么要特别关注的地方?? ...…

查看全部问答>

初学arm问问题-arm 中断 和 异常 问题

ARM中断的问题         ARM的七种异常类型         ---------         1> 复位异常         2> 数据访问中止异常         3> ...…

查看全部问答>

关于stm32f10x_conf.h文件

这是一个库函数配制的头文件,不要用到的外设可以将define注释掉,如 #define _CAN 不要用can模块就可以将它注释掉 //#define _CAN 这样库在编译的时候就不会编译与can相关的头文件 不同的工程用到的资源是不一样的,因此stm32f10x_conf. ...…

查看全部问答>

【求助】请各位大侠指点

请各位大侠给指点一下: 我在用MSP430做一个智能温度控制器,现在P1口连接着一个4X4的键盘,只要一按键就进入中断,我希望在中断里改变一个全局变量的值,可是不知道为什么这个值怎么都带不出来。请各位高人指点一二。…

查看全部问答>

解答FPGA工程师面试第7.8.9题(每日一题)

今天抽点时间上第七题: 你知道哪些常用的逻辑电平?TTL与CMOS电平可以直接互连吗? 常用逻辑电平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Couple Logic)、PECL(PSEUDO/POSITIVE EMITTER COUPLED LOGIC)、LVDS(LOW voltage differential sign ...…

查看全部问答>