+ -
当前位置:首页 → 问答吧 → [求助]请教一个FrameBuffer速度的问题

[求助]请教一个FrameBuffer速度的问题

时间:2006-10-24

来源:互联网

我正用一块基于at91rm9200的板子开发,用的是Epson的S1D13506显示芯片,因为产品特性,我需要图形,但是不需要图形界面,只要把要显示的内容(汉字、图片等)显示出来就行,不需要窗口、按钮等交互界面,所以我选择了用FrameBuffer。

   今天我写了个小程序测试,在一个100*640的矩形了,以逐行上滚的方式显示一些汉字时,发现滚动速度很慢,中间没有任何的认为延时。我的过程大概是这样:

   定义两个char *指针fbp和fbp1,再定义一个数组TextBuffer[100][640],fbp是显存在内存中的映射,fbp1是显存缓存,TextBuffer是汉字对比字模转换后的点阵内容,循环100次,每次把TextBuffer写到fbp1后再用memcpy到fbp1,结果是可以逐行向上滚动直到写满整个100*640的矩形,只是速度很慢,达不到我的要求。

   请问各位兄,是我的程序算法有问题,还是FrameBuffer本身就达不到这种要求呢?不过好象也有一些比较大的GUI图形库也以FrameBuffer为基础,还是我对FameBuffer用法有问题呢,是不是要直接操作显卡S1D13506的寄存器,进行硬件加速呢,请各位有经验,比较熟悉这方面的兄弟介绍一下吧,谢谢!      

作者: alldying   发布时间: 2006-10-24

是循环一次就写一次?      

作者: AIKO_sex   发布时间: 2006-10-25

你用的是什么内核哦
我原来用2.6的,也是用你类似的双缓冲方法绘制位图,速度也是相当的慢
现在我用2.4的,应用程序没有做任何改变就跑的很快...
我也很郁闷哦...      

作者: jojolin   发布时间: 2006-10-27

谢谢AIKO_sex,是循环一次就写一次,因为我是要内容慢慢从下往上走,所以每循环一次显示内容都要更新。


谢谢jojolin,我用的就是2.4的内核啊,你的问题解决了吗?方便的话能把你的这部分的代码给我参考一下吗?[email protected],谢谢!      

作者: alldying   发布时间: 2006-11-07

您需要测试一下您的程序循环一次多长时间?
如果循环时间长,每次就多移动一个位置!      

作者: 风雪狂客   发布时间: 2006-11-07

谢谢风雪狂客。

你的意思是没次往上走2行或者3行?我试过了,这样显得更不连贯,突然往上走一段,停住,我想要的是很连续的往上走,就象我现在做到的这样,但是速度要比现在快很多。

我也用过MINIGUI,不过它也不支持S1D13506的硬件加速,不知道有哪个图形库可以支持S1D13506的硬件加速,低级点没关系,只要速度快,因为我只是显示一些文字或图片内容,以不同方式进出屏而已(进出屏方式类似常见的广告的效果,也类似PowerPoint里的 进出方式),不需要传统的图形用户界面的窗口、对话框、按纽等,请这方面熟悉的兄弟们指点一下,推荐一个图形库吧,谢谢!!!      

作者: alldying   发布时间: 2006-11-08

我的判断是您的系统一次循环太长,所以很慢!硬件加速可以自己写!就是对指定的寄存器设置参数,由软件做的工作由图形处理器完成!比如点线,矩形填充拷贝等等。目前的图形库,很少能够达到您的要求!您看看现在有一个EGUI的库,或许有帮助!另外OPENGUI,DirectFB只是支持X86平台。      

作者: 风雪狂客   发布时间: 2006-11-08

再次谢谢风雪狂客。

   没办法,这种进出屏方式是我们产品的基本显示功能,如果显示区域有100个pixel高的话,就只能循环100次,每次整体往上移1个pixel,暂时我也没想到别的方法。

   如果实在没有能使用s1d13506的硬件加速功能的图形库的话,那我只能自己写了。不过我没搞过这个,只知道通过FrameBuffer可以把显卡的控制寄存器映射到物理内存空间,然后就可以访问这些寄存器了,具体怎么映射,怎么设置寄存器达到加速的目的还是不清楚,风雪狂客能不能详细些指点一下,或者给点资料,网址什么的,谢谢!!!      

作者: alldying   发布时间: 2006-11-08

bitblit软件做太频繁的话,cpu占用太高

要么是批量处理

windows都不建议刷新太频繁,严重消耗cpu      

作者: AIKO_sex   发布时间: 2006-11-08

谢谢AIKO_sex。

我在windows下用bitlbt挺顺的啊,如果Linux下不用bitblt,有什么好办法呢,跟你回的我的另外一个贴子“请指点一下嵌入式系统上图形库的选择”一样,我考虑自己写硬件加速部分,不过还没什么头绪,能不能详细指点下呢,谢谢!      

作者: alldying   发布时间: 2006-11-09

您可以参考LINUX核心中现成的驱动代码,在google上搜索Linux framebuffer的驱动相关资料!
您需要先完成驱动,然后再完成应用程序!      

作者: 风雪狂客   发布时间: 2006-11-09

谢谢风雪狂客,我先试试,有问题再请教,非常感谢!      

作者: alldying   发布时间: 2006-11-09

热门下载

更多