打印

关于单片机ROM RAM的问题

[复制链接]
5246|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kaly_liu|  楼主 | 2013-5-13 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kaly_liu 于 2013-5-14 08:47 编辑

我用KEIL编译程序,出现了这个信息:
Program Size: data=22.2 xdata=890 code=11539

不知道什么意思啊,我的单片机是stc12LE5A60S2说明书上说:flash  60K; sram 1280; EEPROM 1k;
请问,这个程序大小和单片机的关系如何,flash sram eeprom什么时候用到?KEIL中给出的信息可以看出,我烧写hex文件时,烧入的程序代码是多大呢?
各种疑问,球解答额~~~

相关帖子

沙发
kaly_liu|  楼主 | 2013-5-13 15:21 | 只看该作者
还有个奇怪的问题是,在这种情况下,我在程序中定义一个全局变量 unsigned char temp[n];当n大于69时候,虽然keil编译没有警告或者错误,可是当我把程序hex烧入到单片机后,发现单片机工作不正常了;如果我把n变小点,就可以正常工作·····(⊙o⊙)…

使用特权

评论回复
板凳
ayb_ice| | 2013-5-13 16:23 | 只看该作者
何来的sdram

使用特权

评论回复
地板
zdl522| | 2013-5-13 20:27 | 只看该作者
运行的时候定义的变量需要内存,全局变量太大不会释放内存,内存溢出就不工作了,这是我的理解

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
kaly_liu + 2 赞一个!
5
kaly_liu|  楼主 | 2013-5-14 16:52 | 只看该作者
不知道谁知道,XDATA/CODE/DATA到底是如何使用的,编译时候怎么知道什么时候xdata过大了,或者code过大了呢?
我的单片机是stc12LE5A60S2说明书上说:flash  60K; sram 1280; EEPROM 1k;

使用特权

评论回复
6
ayb_ice| | 2013-5-14 17:07 | 只看该作者
程序大小看code=11539

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
kaly_liu + 1 很给力!
7
kaly_liu|  楼主 | 2013-5-14 17:32 | 只看该作者
ayb_ice 发表于 2013-5-14 17:07
程序大小看code=11539

然后那个 data 和 xdata 呢?他们是如何分配的啊,我知道在程序中定义的时候可以加个 xdata 吧变量定义为 那个,就是不知道那个xdata有多大·····

使用特权

评论回复
8
jiegex| | 2013-5-14 19:15 | 只看该作者
data为128字节或者256字节(根据我的经验总是128字节),xdata就是sram了,大小看具体的单片机,512字节,1024字节,2048字节都是有可能的,yourself写个内存测试程序就知道了
data空间是全局变量和堆栈共存的,如果数组定义得太多,堆栈(动态消长)就会在某一个时候不够用了
如果芯片有xdata内存空间,最好把数据放到xdata空间中,防止堆栈溢出,至于数据放到xdata空间会造成运行缓慢什么的,我脑子不好使,不会算
keil编译后,下方会显示已用的data大小,xdata大小,code大小
一般来说(iap系列单片机flash就是eeprom),code放在片内flash空间,eeprom是另一个空间,在源代码中无法用xdata,data,code等等前缀说明数据存放在eeprom空间,eeprom空间的使用是你自己分配,Keil也无法感知它的存在,你可以认为它是很小的软盘

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
kaly_liu + 2 很给力!
9
ayb_ice| | 2013-5-15 07:52 | 只看该作者
不要老是根据我的经验什么什么的

这些基本信息都是在手册上可以查到的

可以看出LZ对51的基本构架都不熟悉,还有很多MCU的基本概念都没有搞清楚,还是先看相关书吧

使用特权

评论回复
10
amwrdfe| | 2013-5-15 10:03 | 只看该作者
这些东西手册上都有详细介绍,访问方式是由结构和地址范围决定的.
data,位于0x00~0x7f地址,可以直接访问
mov a,addr
idata,位于0x80~0xff,与sfr特殊功能寄存器同一地址,必须用间接访问区分开.
mov ri,addr
mov a,@ri
xdata,位于外部0x0000~0xffff,超出了8位的访问范围,必须间接用dptr指针来访问.
mov dptr,addr
movx a,@dptr
code,代码区,位于rom空间,nor,nand等...
绝大多数的cpu的内部ram包括cahe都是sram,具有访问速度快的优点,成本高的缺点.
至于stc内部的eeprom,都是用flash做的,所以操作必须遵守flash操作规则.

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
kaly_liu + 2 赞一个!
11
kaly_liu|  楼主 | 2013-5-16 09:21 | 只看该作者
多谢各位花宝贵的时间来回答我的问题,觉得自己在论坛里面不断的成长了。呵呵!

使用特权

评论回复
12
xuejinlong12| | 2014-1-3 09:03 | 只看该作者
很久没写单片机程序了 不过现在写代码也很少注意这么底层的东西了  学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

344

帖子

3

粉丝