找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2754|回复: 13
打印 上一主题 下一主题
收起左侧

在keil编译C8051F330 data为什么不够?

[复制链接]
跳转到指定楼层
楼主
C8051F330的资料显示ram是256字节的,不知为何在写到86以上总是data报溢出。不想改变Memory Model的设置,因为用xdata编译后的内存接近8K了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752974 发表于 2022-9-9 17:00 | 只看该作者
DATA部分使用的太多了,这部分系统也要使用的,把数据移到PDATA里一部分就可以了。
回复

使用道具 举报

板凳
ID:1034262 发表于 2022-9-9 17:50 | 只看该作者
有数组的优先放xdata
回复

使用道具 举报

地板
ID:624769 发表于 2022-9-9 18:29 来自触屏版 | 只看该作者
256ram中  data只有128,其中通用寄存器最少需要用8,实际能被你用的最多120,其他的ram必须用idata申明。
回复

使用道具 举报

5#
ID:1044319 发表于 2022-9-9 20:24 | 只看该作者
将部分数组,变量前面,加上xdata,使变量实用外部RAM,不是占用内部RAM
回复

使用道具 举报

6#
ID:1044371 发表于 2022-9-9 20:53 | 只看该作者
munuc_w 发表于 2022-9-9 17:00
DATA部分使用的太多了,这部分系统也要使用的,把数据移到PDATA里一部分就可以了。

我也想转用一部分到xdata里去,但是转过去的部分会占用800多字节,这多出的字节刚好把我存取数据flash位置复用,我一但写上数据,就会覆盖程序数据
现在是搞不明白C8051F330里写着有256个data可以用,就是系统占用一半,也应该还有128的吧?但我实际编译到87以上就报警。网上百度过但都是让我换个大flash的芯片,就是想搞明白为何在用到87以上就报警。
回复

使用道具 举报

7#
ID:1041851 发表于 2022-9-9 21:44 | 只看该作者
低128是data(可省略),高128字节和SFR地址相同,要加idata修饰
回复

使用道具 举报

8#
ID:526108 发表于 2022-9-10 09:34 | 只看该作者
DATA只有128字节,这128字节还要被单片机占用一部分,IDATA才是256字节,DATA是IDATA前128字节
回复

使用道具 举报

9#
ID:1044371 发表于 2022-9-10 10:16 | 只看该作者
coody_sz 发表于 2022-9-9 17:50
有数组的优先放xdata

数组和变量我试过设定在xdata里,但是编译后的占用内存太多了,看来只能换芯片了。
回复

使用道具 举报

10#
ID:1044371 发表于 2022-9-10 10:19 | 只看该作者
188610329 发表于 2022-9-9 18:29
256ram中  data只有128,其中通用寄存器最少需要用8,实际能被你用的最多120,其他的ram必须用idata申明。

用到87就报警了,若要申明其他的数据在idata里,我放弃治疗了,因为其中4K的程序是别人提供的。
回复

使用道具 举报

11#
ID:1044371 发表于 2022-9-10 10:22 | 只看该作者
dreamjack 发表于 2022-9-9 20:24
将部分数组,变量前面,加上xdata,使变量实用外部RAM,不是占用内部RAM

加在xdata里没问题,但是占用太多空间了8K的flsah放不下,看来只能换芯片了。
回复

使用道具 举报

12#
ID:1044371 发表于 2022-9-10 10:24 | 只看该作者
qq624353765 发表于 2022-9-10 09:34
DATA只有128字节,这128字节还要被单片机占用一部分,IDATA才是256字节,DATA是IDATA前128字节

看来只能换芯片,要改在idata工作量太大,其中4K的程序是别人给我的。
回复

使用道具 举报

13#
ID:624769 发表于 2022-9-10 14:20 来自触屏版 | 只看该作者
1,只要代码不是汇编写的,改idata基本就是几秒钟的事情,申明变量处,加idata字段即可,程序压更不用动。 2,不管你换啥芯片,只要还是51核,终究只有128data,去掉通用寄存器要用的8-32个字节,加上临时扩展变量要用的若干字节,自己能随意支配的data,说到底也就80多,了不起100出头了。
回复

使用道具 举报

14#
ID:123289 发表于 2022-9-12 15:51 | 只看该作者
建议楼主再仔细阅读CPU手册,内存分布。
其它不说,单说CPU的内部256字节的RAM:
1、R0-R7占用(8个)、辅助备用R0-R7占用(24个)、位寻位占用(16个),堆栈用(与子程序嵌套层次有关,函数结果传递有关),剩余可以自由使用。
2、如果用汇编写程序,可以自己精确规划这256个空间。
3、如果用C写程序,则由编译平台帮你规划处理,空浪费大。平台一般从30H-80H开始规划,另外函数的返回结果也用堆栈传递,如果结果复杂、数据量大,很快就不够用了。
楼上提议用IDATA、XDATA都对,但对楼主来说,最重要的,还是【仔细阅读CPU手册,弄清内存分布。】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表