C51之局部变量和全局变量小记

发布者:独行于世最新更新时间:2016-12-31 来源: eefocus关键字:C51  局部变量  全局变量 手机看文章 扫描二维码
随时随地手机看文章

若在C51中定义一个全局变量,编译器将在RAM中为该变量指定一个专用地址,在C程序中给变量赋的值将存入这个专用地址中,程序操作该变量是,首先从专用地址中取出存放的值,然后再进行计算。全局变量被定义在内存中的专门地址上,存储位置固定。对于频繁存取的重要变量但可以采用全局变量以减少代码的长度;由于全局变量总是占用内存,如果过多,或者把程序处理和计算中的一些中间变量也定义为全局变量,将大大消耗内存空间,处理速度会变慢,同时数据安全性也会降低。


C51中定义一个的局部变量可以和全局变量同名,但在这种情况下,局部变量的优先级较高,而同名的全局变量在该功能模块内暂时被屏蔽。


若在C51中定义一个局部变量,编译器会将该变量的地址分配到寄存器组R0~R7中。由于他是局部变量,所以编译器将使用立即数赋值语句为代表该变量的寄存器Rn赋值,最后的计算结果也将存在寄存器组中,位置有编译器任意指定。局部变量由于用寄存器直接操作,存取速度和计算机速度都很快;由于寄存器数量有限,若局部变量过多,将会使代码由于频繁分配寄存器而变得冗长。


关键字:C51  局部变量  全局变量 引用地址:C51之局部变量和全局变量小记

上一篇:8051单片机波特率计算公式(配套C语言例程)
下一篇:C51:通用、存储器指针

推荐阅读最新更新时间:2024-03-16 15:28

stm32局部变量过大,导致栈溢出
在做一个以stm32为主控的项目时发现自己程序中一个机构体里面的数据总是一运行就被改变,刚开始以为是自己不小心在哪个地方用了extern扩展了变量的作用域,重新赋了值, 自己忘记了,后来查找了好久都没有其他地方使用这个结构体变量,于是开始单步调试,结果进入一个函数的时候(里面定义了一个200个数据float型的数组),发现只要定了一个这个数组,这时前文提到的那个结构的值就发生改变,通过在keil软件中的Memory窗口查看结构体的变量可以清楚看到结构体的地址里面的数据在这个时候发生改变, 然后修改,这个局部变量数组的大小,把它改小之后,就没有发生问题。因为局部变量是储存在栈中的,于是猜想,这种问题应该是stm32的栈的内存的溢出造
[单片机]
stm32<font color='red'>局部变量</font>过大,导致栈溢出
C51学习五)单片机与PC通过串口通信
1.开发步骤 1.设置串口中断寄存器 2.求出给定波特率对应的T1定时器初始值(因为传统的C51是用T1定时器产生波特率的) 3.写程序 2.串口模块 什么是串口?串口就是COM口,串口是串行发送数据的,是一位位地发送数据位,常见的是9针串口。但在一般的C51学习版和开发版上都有集成CH340转换芯片, 使得用usb口就可以代替串口,所以用一般的学习板进行开发,只要插上usb线就可以进行串口测试。 3.SBUF是什么 SBUF是一个寄存器,作为一个缓冲区,当单片机准备接收数据时,会先把数据放到SBUF中,然后再接收。发送也是,当单片机准备发送数据时,会先把数据放到 SBUF中,再发送出去 4.串口相应寄存器 SCON串
[单片机]
C51的中断号排序规则
  在编写中断服务程序(ISR)的时候需要知道中断号,用于通知51内核,这个中断服务程序是为了响应哪个中断的。那么,从以上这句简单的描述可以看出,中断号必然对应于中断服务程序的入口地址,而入口地址又与中断向量(Interrupt Vector)有对应关系,所以:   (1)、中断号即是中断向量从小到大的编号,从0开始;   (2)、中断向量0x0000是上电复位,不计入中断向量的编号;   (3)、特别注意,有些中断源的默认中断优先级并不是中断向量从小到大的编号,所以默认的中断优先级并不能作为中断号使用。    什么是中断号 // Wake-up interrupt handler void resume_isr(
[单片机]
Keil C51中变量的使用方法详解
引言 8051内核 单片机 是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同。正确地使用变量,有利于获得高效的目标代码。下面详细介绍Keil C51中变量的使用方法。 1 CPU存储结构与变量的关系 变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。 标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register
[单片机]
Keil <font color='red'>C51</font>中变量的使用方法详解
Keil C51开发系统基本知识2
3. 第三节 存储模式 存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域,共三种: 1. 1. Small模式 所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。 2. 2. Compact模式 所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。 3. 3. large模式 所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。 提示:存储模式在C51编译器选项中选择。 4.
[单片机]
单片机c语言教程第三章--C51数据类型
每写一个程序,总离不开数据的应用,在学习 c51 语言的过程中掌握理解数据类型也是 很关键的。先看表 3-1,表中列出了 KEIL uVision2 单片机c语言编译器所支持的数据类型。在标准C语言中基本的数据类型为 char,int,short,long,float 和 double,而在c51编译器中int 和 short 相同,float 和 double 相同,这里就不列出说明了。下面来看看它们的具体定 义 数据类型 长 度 值 域 unsigned char 单字节 0~255 signed char 单字节 -128~+127 unsigned int 双字节 0~65535
[单片机]
C51串口通信(中断模式)T2产生波特率
#include reg52.h #define uchar unsigned char uchar temp; void serial()interrupt 4 using 1 { if(RI) { RI=0; temp=SBUF; SBUF=temp; } else if(TI) TI=0; } main() { uchar string = AT89C52 Microcomputer!Designer: Grarry Meng ; uchar i=0; RCLK=1; TCLK=1; TH2=0XFF; TL2=0XDC; RCAP2H=0XFF; RCAP2L=0XDC;
[单片机]
Keil C51高级编程
l 绝对地址访问 l C与汇编的接口 l C51软件包中的通用文件 l 段名转换与程序优化 第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 绝对宏: 在程序中,用“#include absacc.h ”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知 例如: rval=CBYTE ;指向程序存贮器的0002h地址 rval=XWORD ;指向外RAM的0004h地址 2. _at_关键字 直接在数据定义后加上_at_ const即可
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved