打印
[51单片机]

请教如何在单片机只有256字节的外部SRAM定义300个单元的数组

[复制链接]
3210|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
古道热肠|  楼主 | 2013-9-21 21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在的51单片机通常带512字节RAM,包含8052兼容的256字节RAM和挂在外部总线上的256字节SRAM,后面的这256字节用Xdata指定,用MOVX访问,现在的情况是应用如果需要300个字节的数组,如何直接定义呢?请教大家有没有好的办法。
如果小于或等于256字节,那好办,直接定义成unsigned char xdata  DataBuff[256];现在大于256字节后,就要用两个空间,访问的指令都不一样,能想到的是将300个字节定义成2部分,1部分256,1部分余下的40多字节,然后封装成统一的寻址接口,有些麻烦,唉,这51架构,内存有好几种,不象AVR,512字节的芯片,开个300多字节的数组很简单。
呵呵,不要跟我讲选RAM容量大的51,我也知道有总容量为768字节的芯片,但价格不一样,大路货,竞争激烈,能省则省。先谢谢各位看官!

相关帖子

沙发
ayb_ice| | 2013-9-22 07:56 | 只看该作者
只能定义两个数组了,不过访问就很麻烦了

使用特权

评论回复
板凳
wangke2010| | 2013-9-22 09:14 | 只看该作者
这么大的数组,如果不需要修改的话,固定在ROM中吧,如果需要修改,那就分成两个数组

使用特权

评论回复
地板
yhn1973| | 2013-9-22 09:45 | 只看该作者
不指定XDATA类型怎样,没试过。

使用特权

评论回复
5
airwill| | 2013-9-22 10:10 | 只看该作者
两个数组, 超出 256 的部分, 放到 iData 区去

使用特权

评论回复
6
airwill| | 2013-9-22 10:10 | 只看该作者
两个数组, 超出 256 的部分, 放到 iData 区去

使用特权

评论回复
7
ayb_ice| | 2013-9-22 11:23 | 只看该作者
如果访问比较简单也许还可以吧
访问过程先判断范围,然后调用具体的操作

比如:
buf_write(U16 add, U8 v)
{
....
}

使用特权

评论回复
8
ayb_ice| | 2013-9-22 11:24 | 只看该作者
如果数据分几大块也好办点

使用特权

评论回复
9
古道热肠|  楼主 | 2013-9-22 16:13 | 只看该作者
yhn1973 发表于 2013-9-22 09:45
不指定XDATA类型怎样,没试过。

不指定类型时,会用默认的类型来实现,小模式用Data空间,会报错,大模式时不报错,但实际使用了超过256个字节的SRAM空间,执行时会出错。
谢谢大家,好象的确没有好办法,只能搞两块定义,然后分开统一用1个函数来读写了。

使用特权

评论回复
10
jiemnij| | 2013-9-22 20:41 | 只看该作者
什么东西..需要300个数组那么多啊 .
或许有其他办法..不用300个呢?

使用特权

评论回复
11
yulunna| | 2013-9-23 15:49 | 只看该作者
我感觉可以这样,说下自己的想法,具体能不能实现不晓得:lol
1、配合ROM和RAM用,在ROM中开一段256的数组即00-FF,因为要存入RAM中的值在这个范围内
2、对采样的值(即你要存入RAM中的值)和ROM中的值通过某种方法进行处理。因为采样的值和ROM中的某一个值相等,所以可以开一组状态位或计数器。主要是得到300个字节在ROM中的位置,以及序列。。。,主要是将存读RAM变成计数标志ROM和读ROM操作:lol

使用特权

评论回复
评论
古道热肠 2013-9-24 12:23 回复TA
您是想压缩数据吧,我的数据是从上位机发的通讯包,一次高速传下来,只能先收下来暂存在内存中再作处理,你这办法好象行不通,谢谢! 
12
yulunna| | 2013-9-24 22:53 | 只看该作者
:lol上面点评的貌似不能回复:版主你这高速不知道多高,如果接收端的速度可以高于发送端的话,我的意思是如果发送端以10US速度发送的话,接收端有足够的时间接收这个数据并且处理这个数据的话,我想这个方法应该可以考虑一下,如果接收的时间和处理的时间大于发送的间隔时间的话,这办法确实行不通

使用特权

评论回复
13
yangfan19641964| | 2013-9-25 09:47 | 只看该作者
LZ恰恰说错了。对于IC芯片,如果不是生产工艺具有技术层面上的重大差别,那么其售价取决于市场销售量或占有量。比如STC89C52带256字节xdata,STC89C58带1024字节xdata,但58比52便宜。
以后的趋势将是内部资源更多的型号反而价廉。再举个例子,同为串行输入并行输出移位寄存器芯片,74HC595的内部结构比74HC164复杂多了,它有三大功能模块而164只有一块,但74HC595只要3毛、而74HC164需要1元5。
至于你的问题,不换芯片的话找不到好的解决方法。只能看程序怎么稍微简洁一些而已。

使用特权

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

本版积分规则

个人签名:以VS1003B和山景SOC芯片为背景,倾心研制数字化语音录放产品. 排忧邮箱:xg_2004_sy@126.com 得意之作是做了个AVR高压编程器,用起来爽歪歪, 串口MP3录放音模块,全面进入数字录放音时代

284

主题

6411

帖子

16

粉丝