当前位置: 代码迷 >> 单片机 >> 单片机内部 数据储存规则
  详细解决方案

单片机内部 数据储存规则

热度:68   发布时间:2016-04-28 15:25:03.0
单片机内部 数据存储规则
单片机利用KEIL编译,编译后可以在Build窗口看到如下的信息,
Program Size: data=22.2 xdata=931 code=14358

然后我的单片机查了下,里面的说明是这样的:
单片机是stc12LE5A60S2说明书上说:flash  60K; sram 1280; EEPROM 1k;

在程序中定义 xdata、code这些变量的时候,是如何使用程序中的存储的,如何知道有没有超过····
球指点······


------解决方案--------------------
不用操心,编译器帮你解决,如果不够会给出警告或错误

如果想看详细的情况可以看生成的*.mpf文件
------解决方案--------------------
建立工程的时候,选择正确的型号。编译器会自动安排数据空间,除非你在代码里面指定了存放代码的绝对地址,而改地址超出了该型号芯片的最大物理空间。这样的情况,编译器应该也会报错的。
------解决方案--------------------
我的理解是,可以扩展到那么大,没有自带的。
------解决方案--------------------
data为128字节或者256字节,在手册上可以查到,xdata就是sram了,大小看具体的单片机,512字节,1024字节,2048字节都是有可能的。data空间是全局变量和堆栈共存的,如果数组定义得太多,堆栈(动态消长)就会在某一个时候不够用了。如果芯片有xdata内存空间,最好把数据放到xdata空间中,防止堆栈溢出,至于数据放到xdata空间会造成运行缓慢什么的,俺就不会算。keil编译后,下方会显示已用的data大小,xdata大小,code大小。一般来说(iap系列单片机flash就是eeprom),code放在片内flash空间,eeprom是另一个空间,在源代码中无法用xdata,data,code等等前缀说明数据存放在eeprom空间,eeprom空间的使用是你自己分配,Keil也无法感知它的存在,你可以认为它是很小的软盘。
至于stc内部的eeprom,都是用flash做的,所以操作必须遵守flash操作规则。
  相关解决方案