有时我们会遇到这样的报错:
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GROUP_
LENGTH: 002CH
Program Size: data=117.0 xdata=0 code=6242
Target not created.
Build Time Elapsed: 00:00:00
报错截图如下:
这类报错是提醒 我们定义了过多的变量:
我们一般使用Small来存储变量,
就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,
就会报错,所以我们编译的时候就要选取外部RAM了。
我们点开魔棒寻找解决方案:
发现将memory mode改成Compact :variables inPDATA 在编译,
就不报错,通过编译了~~~
那这个memory mode究竟是什么呢?
Small:变量存储在内部ram里;
small模式下,再入函数的堆栈是设在idata中的
Compact:变量存储在外部ram里,使用页8位间接寻址;
compact模式下,再入函数堆栈是设在pdata中的
Large:变量存储在外部Ram里,使用16位间接寻址;
可见,compact和large必须有外部RAM支持。
使用Small的模式:
并不是说变量就不可以存储在外部,
只是你要指定存储在外部,,比如:
unsigned char xdata a; 变量a存储在外部的ram。
unsigned char a; 变量默认存储在内部ram。
使用Large的模式:
unsigned char xdata a; 变量a存储在外部的ram。
unsigned char a; 变量默认存储在外部ram。
以上就是说这三个选项其实只是影响,
当没有特别指定变量的存储空间的时候,
默认变量存储在哪里,比如上面的变量定义unsigned char a。
如果在变量声明时未声明变量的存储器类型,
则该变量的存储器类型,由程序的存储模式来决定:
小模式(small model): 默认data区
紧凑模式(compact model):默认pdata区
大模式(large model): 默认xdata区
相关蓝桥杯板载资源列举:
1.IAP15f2k60S2含义:
IAP15:单片机型号
F:单片机工作电压5.5V-4.2V
2k: 2048字节的SRAM、最大主频35MH
60: 60KB flash/ROM程序存储器
S2: 含有2个串口
KB=k
2^10Byte=1024Byte=1KB
1KB字节=1024Byte=1024*8bit
波特率bit/s
2、硬件信息:
- CPU:8位
- 3个16位定时器 T0(P34)、T1(P35)、T2(P30)
- 8通道10位ADC(3路PWM可做3路DA转换、不具备独立的DA转换)
- IO口最大位数42
- SP1总线:MOSI表示主机输出从机输入(SPI在温度模块,高速串行通信接口)
- 外部中断2的中断号8 SP1中断号9
- IO口四种工作模式
- 7种复位方式
- 7种寻址方式
- 外部存储器16地址总线、8位数据总线
- P2高8位地址、P0低8位地址和8位数据总线。
4. 存储器分类:
data: 直接寻址的片内RAM
bdata:位寻址片内RAM
idata: 间接寻址片内RAM区
pdata:间接访问的片外RAM的低256B
xdata:间接访问用DPTR的片外RAM,
code: 程序存储区ROM
5.RAM分类:
易失存储器(掉电)
RAM:随机存储器
SRAM: static RAM 静态存储器,(不需要刷新)
DRAM:Dynamic RAM 动态存储器(需要刷新)
DDRAM 双倍速率同步
非易失存储器(掉电)
ROM 自读存储器
PROM 擦除一次EPROM 擦除1000次
EEPROM电子可擦除
flash、norflash