标题:
51单片机定义的变量默认是存在哪个区域的?
[打印本页]
作者:
忆1709
时间:
2021-6-8 12:57
标题:
51单片机定义的变量默认是存在哪个区域的?
数据区包含data、idata、bdata、xdata等,定义变量时,加上这几个存储区域类型关键字,就能指定变量存储的位置,那么如果不指定,其默认是放在哪里的呢?
如,定义一个全局变量 unsigned char x; 这里的x ,默认是放到哪个区域的?
如,定义一个局部变量unsigned char x; 这里的x,又默认是放到哪个区域的?
作者:
tyrl800
时间:
2021-6-8 15:23
这个是由储存模式决定的
作者:
1506609420
时间:
2021-6-8 15:48
数据空间又分为内部数据空间(IRAM)和外部数据空间(XRAM),他们的大小和访问速度有很大区别。用data、bdata、idata、pdata、xdata修饰变量时,会导致变量存在不同的数据空间中,从而导致访问速度的差异。
作者:
yabiyff
时间:
2021-6-8 15:48
默认当然是存在内存里,反正不在flash里,全局变量存在编译器定义的静态存储区,局部变量在栈里面
作者:
angmall
时间:
2021-6-8 16:45
如,定义一个全局变量 unsigned char x; 这里的x ,默认是放到哪个区域的?
DATA
如,定义一个局部变量unsigned char x; 这里的x,又默认是放到哪个区域的?
寄存器
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char Ex; //定义一个全局变量
void delay()
{
unsigned char x; //定义一个局部变量
for(x=0;x<150;x++)
{
;
}
}
void main()
{
Ex =1;
delay();
}
复制代码
C51 COMPILER V9.52.0.0 TEST001 06/08/2021 16:36:51 PAGE 1
C51 COMPILER V9.52.0.0, COMPILATION OF MODULE TEST001
OBJECT MODULE PLACED IN Test001.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Test001.c BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS TABS(2)
line level source
1 #include "reg51.h"
2
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 unsigned char Ex; //定义一个全局变量
8
9 void delay()
10 {
11 1 unsigned char x; //定义一个局部变量
12 1 for(x=0;x<150;x++)
13 1 {
14 2 ;
15 2 }
16 1 }
17
18 void main()
19 {
20 1 Ex =1;
21 1 delay();
22 1
23 1 }
C51 COMPILER V9.52.0.0 TEST001 06/08/2021 16:36:51 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION delay (BEGIN)
; SOURCE LINE # 9
; SOURCE LINE # 10
; SOURCE LINE # 12
;---- Variable 'x' assigned to Register 'R7' ----
0000 E4 CLR A
0001 FF MOV R7,A
0002 ?C0001:
; SOURCE LINE # 13
; SOURCE LINE # 15
0002 0F INC R7
0003 BF96FC CJNE R7,#096H,?C0001
; SOURCE LINE # 16
0006 ?C0004:
0006 22 RET
; FUNCTION delay (END)
; FUNCTION main (BEGIN)
; SOURCE LINE # 18
; SOURCE LINE # 19
; SOURCE LINE # 20
0000 750001 R MOV Ex,#01H
; SOURCE LINE # 21
0003 020000 R LJMP delay
; FUNCTION main (END)
C51 COMPILER V9.52.0.0 TEST001 06/08/2021 16:36:51 PAGE 3
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
delay. . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
x. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Ex . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 13 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
复制代码
作者:
忆1709
时间:
2021-6-9 12:05
angmall 发表于 2021-6-8 16:45
如,定义一个全局变量 unsigned char x; 这里的x ,默认是放到哪个区域的?
DATA
如,定义一个局部变量u ...
谢谢,后面的汇编看不懂
,但后面的存储区域分配基本看明白了,相当于不管全局变量还是局部变量都是默认放在data区,因为data区包含了寄存器组和bdata区,其中局部变量特别放到了寄存器组里面。
作者:
shumivan
时间:
2021-6-17 11:26
全局变量和局部变量的存放有堆和栈的区分.即使局部变量,如果加上static也相当于一个全局变量
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1