主题 : 我的2440板CPU跑得特慢!为什么? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
楼主  发表于: 2009-08-16 17:50

 我的2440板CPU跑得特慢!为什么?

我的2440板运行UCOS-II和TEST程序。按照源代码设定CPU应该是跑400MHZ。但里面用Paint_Bmp()显示一张320*240的16BIT全图,却明显觉得慢。就算我用C语言内嵌汇编把显示程序精简成每次循环只需要4条汇编指令,还是觉得慢。感觉我的CPU只是跑4MHZ,而不是400MHZ的样子。我计算过,就算CPU跑32MHZ,也能在20毫秒左右完成显示。显图根本不会觉得慢的。更何况是400MHZ。但我查来查去还是看不出哪里出错。总之就是我可以肯定我的板用的UCOS-II和TEST程序。只是跑着很低的CPU主频。为什么呢?
zhb
级别: 新手上路
UID: 7366
精华: 0
发帖: 45
金钱: 450 两
威望: 440 点
综合积分: 90 分
注册时间: 2009-07-12
最后登录: 2010-07-15
1楼  发表于: 2009-08-16 18:23
算指令运行周期当然快,但是并不是每条指令都是瞬间完成的。

自己动手操作过LED显示屏(是LED,1602之类的)就知道,显示屏并不是随时都能接受CPU的指令。对于LCD,可能90%以上的时间都是Busy状态,CPU要等到显示屏内部处理完毕后才能把指令发出去。

同样的例子,可以在PC机上写一个C程序,不断在CommandLineInterface屏幕输出字符。虽然代码很少,但输出的速度并不像你想象的那样快。
这个阶段正是我事业的上升期,我怎么能走得开呢?
级别: 精灵王
UID: 3197
精华: 3
发帖: 770
金钱: 6995 两
威望: 5398 点
综合积分: 1600 分
注册时间: 2008-12-30
最后登录: 2010-12-31
2楼  发表于: 2009-08-16 18:46
uCos2和2440test带的画图函数并不是最优的,Linux和wince的显示效果就很快。在240x320上播放视频都很流畅。
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
3楼  发表于: 2009-08-16 19:56
但也不会慢这么多吧!我感觉是几十倍的差别哦?而且是指令走得慢哦!因为其实显示数据只是被拷贝到LCD控制器指定的RAM中,应该是暗按指令计算的,LCD控制器再把控制讯号传到LCD DRIVER上,这些是硬件完成的,没理由会这么慢的。我想要么是CPU主频设置慢,要么是LCD控制字设置不对,不然的话不会这么慢的。
zhb
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
4楼  发表于: 2009-08-19 21:54
经过对比和修改源代码的尝试,我发现在2440bootV4程序里调用Paint_Bmp()程序,用同样的方法显图,刷屏却十分十分快,比在test,ucos2程序里调用快很多。看来不是板的问题,也不是显示程序不够优化的问题,而应该是硬件控制字的问题,但由于我对2440的硬件控制还不熟悉,没有认真研究过2440的SPEC,所以还找不出究竟是哪方面的问题。我怀疑是CPU在SLOW模式运行,只走十几兆主频,但查过好像又不是。跟着我对照test程序和2440bootV4程序的硬件RESET初始化程序和LCD初始化程序。又没发现有哪些不同。是否会是程序的DOWNLOAD地址或是LCD显示地址的定义问题?哎!看来我要先花时间看看2440的LCD和时钟控制部分的资料才行!
[ 此帖被zsuzhb在2009-08-19 22:01重新编辑 ]
zhb
级别: 新手上路
UID: 7366
精华: 0
发帖: 45
金钱: 450 两
威望: 440 点
综合积分: 90 分
注册时间: 2009-07-12
最后登录: 2010-07-15
5楼  发表于: 2009-08-20 15:38
关注
级别: 新手上路
UID: 5662
精华: 0
发帖: 8
金钱: 80 两
威望: 55 点
综合积分: 16 分
注册时间: 2009-05-03
最后登录: 2009-09-07
6楼  发表于: 2009-08-22 11:52
我发现应该是因为我没有把程序下载到RAM或是高速CACH中运行吧。这样是相差很远的,在FLASH中远行而没把程序COPY到RAM中运行,就只能跑10M左右。若在RAM或高速CACH中运行才能有正常的400M左右的高速!
zhb
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
7楼  发表于: 2009-08-22 14:07
呵呵,我在想我要不要把这个帖子加精?
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."