打印

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

[复制链接]
6321|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qzx0580|  楼主 | 2007-1-3 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
qzx0580|  楼主 | 2007-1-4 10:37 | 只看该作者

没人解决吗?

我目前只能把数组放到FLASH中,但是读的时候不正确,显示的字符总是异常的.

如果把数组放到RAM中,就可以正常显示,但是放在FLASH中就异常了.

使用特权

评论回复
板凳
qzx0580|  楼主 | 2007-1-5 08:38 | 只看该作者

没人解决吗?

没人解决吗?

使用特权

评论回复
地板
qzx0580|  楼主 | 2007-1-6 09:02 | 只看该作者

顶!直到绝望!

顶!直到绝望!顶!直到绝望!顶!直到绝望!顶!直到绝望!

使用特权

评论回复
5
xwj| | 2007-1-6 09:44 | 只看该作者

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

使用特权

评论回复
6
xwj| | 2007-1-6 10:06 | 只看该作者

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

使用特权

评论回复
7
qzx0580|  楼主 | 2007-1-6 10:17 | 只看该作者

回xwj!

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

使用特权

评论回复
8
xwj| | 2007-1-6 11:50 | 只看该作者

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

使用特权

评论回复
9
qzx0580|  楼主 | 2007-1-6 12:01 | 只看该作者

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

这句话是什么意思啊?我看不太明白,能不能说得详细些?谢谢.

使用特权

评论回复
10
luyinkai| | 2007-1-8 09:56 | 只看该作者

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

1,是否数据类型定义有问题?,若采用C编程话,应使数组的数据类型(如int16)与读出的临时存放的变量类型一样.
2,数组存放在flash中是否正确,若使用汇编编程用.word即可.
3,若使用C编程的话,应注意CMD文件中常数变量的段定义是否正确,例
   .econst          : > FLASHP         PAGE = 0    

使用特权

评论回复
11
qzx0580|  楼主 | 2007-1-9 12:49 | 只看该作者

回luyinkai

luyinkai朋友:

我是用C写的程序,我把数组定义成const int CCTable[64]={...};

在CMD中设置
...
PAGE0
       Table: origin=0x0180,length=0x1000;
       ......

.const    :> Table   PAGE=0

大意是这样的,我观察了FLASH空间,发现数组是放进去了,但是读取的数值却是从相同地址的RAM中读出来的.问题就在这里.

使用特权

评论回复
12
hexiaobo| | 2007-1-9 17:11 | 只看该作者

可以解决

在cmd文件中定义:
MEMORY
{
   EXT    : origin = 8000h , length =  8000h   /* Ext mem */
}

在lcd.h中定义:
#pragma DATA_SECTION(Ascii, "ext")
int Ascii[]=
{
........
};
我这样把数组定义到了外部扩展存储器中,相应改一下cmd文件,应该也可定义到flash中。

使用特权

评论回复
13
qzx0580|  楼主 | 2007-1-10 12:44 | 只看该作者

hexiaobo

hexiaobo朋友:
    这个方法我用过,但是不知道是不是不得其法.发现是不可行的.我想问题可能出现FLASH与RAM的数据存储有一些区别.而我不知道到底差在哪里.
    谢谢你的回复.

使用特权

评论回复
14
lanmanck| | 2007-1-10 15:46 | 只看该作者

hexiaobo的回答是正确的

我也用过

使用特权

评论回复
15
hexiaobo| | 2007-1-10 16:30 | 只看该作者

不用谢!

如果你的方法没问题,我估计可能不能将数组直接定义到flash中,这有可能是编译器的问题。
如果你外扩有足够的RAM,你可以按照我的办法将数组定义到外部扩展存储器中。每次系统初始化时,由编译器的代码直接将数组初始化,也起到了常量数组的作用。你可以试一试。

使用特权

评论回复
16
qzx0580|  楼主 | 2007-1-11 08:55 | 只看该作者

hexiaobo

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

使用特权

评论回复
17
qzx0580|  楼主 | 2007-1-11 13:33 | 只看该作者

可以实现的

这个功能是可以实现的.有人做过,用C调用汇编,具体的做法目前我还不懂.

使用特权

评论回复
18
nxy825715| | 2007-1-11 13:40 | 只看该作者

个人见解:

直接定义数组;
例如:unsigned char Array[1000] = {.....};就可以了。

使用特权

评论回复
19
qzx0580|  楼主 | 2007-1-11 16:00 | 只看该作者

nxy825715

nxy825715:
    这样定义的数组在RAM中.

使用特权

评论回复
20
qzx0580|  楼主 | 2007-1-13 08:47 | 只看该作者

请指教!

请指教!请指教!请指教!请指教!

使用特权

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

本版积分规则

28

主题

172

帖子

0

粉丝