请教怎样把很大的数组放到2407的FLASH中?!

[复制链接]
7523|20
 楼主| qzx0580 发表于 2007-1-3 13:15 | 显示全部楼层 |阅读模式
我用到液晶显示,但是由于液晶本身的CGRAM=2K远远不够存入我要显示的自定义字符数组,二维数组(大约有三百个中文字,按照16*16*300来计算,要用到将近10K的空间.所以我想把这些数组放到FLASH中,请教应该如何设置才能实现此功能?<br /><br />万分感谢!&nbsp;
 楼主| qzx0580 发表于 2007-1-4 10:37 | 显示全部楼层

没人解决吗?

我目前只能把数组放到FLASH中,但是读的时候不正确,显示的字符总是异常的.<br /><br />如果把数组放到RAM中,就可以正常显示,但是放在FLASH中就异常了.<br /><br />
 楼主| qzx0580 发表于 2007-1-5 08:38 | 显示全部楼层

没人解决吗?

没人解决吗?
 楼主| qzx0580 发表于 2007-1-6 09:02 | 显示全部楼层

顶!直到绝望!

顶!直到绝望!顶!直到绝望!顶!直到绝望!顶!直到绝望!
xwj 发表于 2007-1-6 09:44 | 显示全部楼层

换带缓存的液晶屏吧,同一屏能显示的自定义字符数目受CGRAM

  
xwj 发表于 2007-1-6 10:06 | 显示全部楼层

你应该按点的方式去操作点阵屏

  
 楼主| qzx0580 发表于 2007-1-6 10:17 | 显示全部楼层

回xwj!

据我所知,目前比较通用的液晶控制器不外乎两种:T6963C和SED1335A两种.这两种控制器的CGRAM都只有2K.我要存储的字模数组实在太大,有10K左右.字符的产生方式我都用上了,有内部CGRAM生成的,也有GRAPHIC方式下直接由DSP发送的.不管是哪种方式,存储空间都不足够存放这样大的数组.所以只好寻求方法把数据放在FLASH中,现在的问题是能够放进去,但是读不出来.(读出的是RAM中的数据).我一直弄不懂读FLASH与读RAM中的数据有何不同.
xwj 发表于 2007-1-6 11:50 | 显示全部楼层

呵呵,所以偶才补充:“你应该按点的方式去操作点阵屏”

  
 楼主| qzx0580 发表于 2007-1-6 12:01 | 显示全部楼层

什么叫"按点的方式去操作点阵屏"呢?

这句话是什么意思啊?我看不太明白,能不能说得详细些?谢谢.
luyinkai 发表于 2007-1-8 09:56 | 显示全部楼层

是否数据类型定义有问题?

1,是否数据类型定义有问题?,若采用C编程话,应使数组的数据类型(如int16)与读出的临时存放的变量类型一样.<br />2,数组存放在flash中是否正确,若使用汇编编程用.word即可.<br />3,若使用C编程的话,应注意CMD文件中常数变量的段定义是否正确,例<br />&nbsp;&nbsp;&nbsp;.econst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&gt&nbsp;FLASHP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAGE&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;<br />
 楼主| qzx0580 发表于 2007-1-9 12:49 | 显示全部楼层

回luyinkai

luyinkai朋友:<br /><br />我是用C写的程序,我把数组定义成const&nbsp;int&nbsp;CCTable[64]={...};<br /><br />在CMD中设置<br />...<br />PAGE0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table:&nbsp;origin=0x0180,length=0x1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<br /><br />.const&nbsp;&nbsp;&nbsp;&nbsp;:&gt&nbsp;Table&nbsp;&nbsp;&nbsp;PAGE=0<br /><br />大意是这样的,我观察了FLASH空间,发现数组是放进去了,但是读取的数值却是从相同地址的RAM中读出来的.问题就在这里.
hexiaobo 发表于 2007-1-9 17:11 | 显示全部楼层

可以解决

在cmd文件中定义:<br />MEMORY<br />{<br />&nbsp;&nbsp;&nbsp;EXT&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;origin&nbsp;=&nbsp;8000h&nbsp;,&nbsp;length&nbsp;=&nbsp;&nbsp;8000h&nbsp;&nbsp;&nbsp;/*&nbsp;Ext&nbsp;mem&nbsp;*/<br />}<br /><br />在lcd.h中定义:<br />#pragma&nbsp;DATA_SECTION(Ascii,&nbsp;&quot;ext&quot;)<br />int&nbsp;Ascii[]=<br />{<br />........<br />};<br />我这样把数组定义到了外部扩展存储器中,相应改一下cmd文件,应该也可定义到flash中。<br />
 楼主| qzx0580 发表于 2007-1-10 12:44 | 显示全部楼层

hexiaobo

hexiaobo朋友:<br />&nbsp;&nbsp;&nbsp;&nbsp;这个方法我用过,但是不知道是不是不得其法.发现是不可行的.我想问题可能出现FLASH与RAM的数据存储有一些区别.而我不知道到底差在哪里.<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢你的回复.
lanmanck 发表于 2007-1-10 15:46 | 显示全部楼层

hexiaobo的回答是正确的

我也用过
hexiaobo 发表于 2007-1-10 16:30 | 显示全部楼层

不用谢!

如果你的方法没问题,我估计可能不能将数组直接定义到flash中,这有可能是编译器的问题。<br />如果你外扩有足够的RAM,你可以按照我的办法将数组定义到外部扩展存储器中。每次系统初始化时,由编译器的代码直接将数组初始化,也起到了常量数组的作用。你可以试一试。
 楼主| qzx0580 发表于 2007-1-11 08:55 | 显示全部楼层

hexiaobo

hexiaobo朋友:<br />&nbsp;&nbsp;&nbsp;&nbsp;以我的理解外扩RAM与内部RAM本质上都是RAM,所以我觉得把数组放入外部RAM应该不是问题.我现在更加觉得应该是FLASH与RAM有些不同.就目前来说,基本上已经没有办法外扩RAM了,一来时间严重不够用,二来精力不够用.我还要做另外一个全新的尝试.再者我听说有办法解决这个问题的.有人成功过,但是他用到了C调用汇编!而汇编一直是我的盲点.所以目前我只能先把这个搁起来,再寻求新的方法了.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;非常感谢你的指点.
 楼主| qzx0580 发表于 2007-1-11 13:33 | 显示全部楼层

可以实现的

这个功能是可以实现的.有人做过,用C调用汇编,具体的做法目前我还不懂.
nxy825715 发表于 2007-1-11 13:40 | 显示全部楼层

个人见解:

直接定义数组;<br />例如:unsigned&nbsp;char&nbsp;Array[1000]&nbsp;=&nbsp;{.....};就可以了。
 楼主| qzx0580 发表于 2007-1-11 16:00 | 显示全部楼层

nxy825715

nxy825715:<br />&nbsp;&nbsp;&nbsp;&nbsp;这样定义的数组在RAM中.
 楼主| qzx0580 发表于 2007-1-13 08:47 | 显示全部楼层

请指教!

请指教!请指教!请指教!请指教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

172

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部