当前位置: 首页 > 专利查询>浙江大学专利>正文

一种嵌入式系统开发平台图形库的性能优化设计方法技术方案

技术编号:2919133 阅读:380 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及嵌入式系统,旨在提供一种嵌入式系统开发平台图形库的性能优化设计方法。该方法包括以下步骤:(1)重载分配内存/释放内存操作;(2)预链接Qtopia共享链接库:为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模。该发明专利技术通过去除两个函数的通用性,提高了分配和释放内存空间时候的性能;更新了动态链接库,用预链接的方法链接所有的共享链接库,在不削弱程序扩展性的前提下,大幅度减少程序启动时花在重定位上的动态链接时间;使用专用的命令,减少可执行文件的执行规模,提高效率。

【技术实现步骤摘要】

本专利技术涉及嵌入式系统,更具体的说,是涉及。
技术介绍
Qtopia是由Trolltech公司基于Qt/Embedded开发地第一个嵌入式地窗口环境和应用程序,有PDA和PHONE两种不同的版本。它被广泛用于PDA、手机、网络设施、掌上设备等。它包括全套的个人信息管理PIM(Personal InformationManagement),如地址本、电脑、日程安排、MPEG播放、图像显示、浏览器等,当然也还有Email、游戏、配置工具。当前,QT在PC上的性能是非常好的。有了qvfb,Qtopia程序也可以在Intel XScale PXA 255上运行。在PC上,整个Qt/Qtopia任务栏的启动时间不到1秒,其中第一次启动是0.8秒,第二次启动是0.4秒。第二次时间要短于第一次是因为部分目标文件已经存在于内存中了。但是Qtopia在Intel XScale PXA 255上的成绩就不是那么好了。在本次实验的板子上,整个Qtopia启动大约花了28秒。Qtopia启动时间是指Application::exec调用发生之前的时间。这是由于Qt/Embedded是用C++实现的,所以在几种成熟的GUI中系统资源消耗最大。所以有必要对它进行优化。改进Qtopia图形函数库,提升热点函数的性能,增加缓存,都可以对Qtopia进行优化,但是,使用这些优化,基本都没有对Qtopia的底层函数进行任何修改,仅仅是使用外部工具,或者改变Qtopia的画图方法,这样没有充分发挥Qtopia的可定制性,也增加了这些优化方法的限制。
技术实现思路
为了克服现有技术中的不足,本专利技术提供了。为了解决技术问题,本专利技术是通过如下技术方案实现的。,包括以下步骤(1)分配内存和释放内存的重载①分配内存的重载在重载时,函数提供的行为要和系统缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况;②释放内存的重载在出现要求释放的是空地址的情况情况,不做任何操作,直接将NULL返回。(2)预链接Qtopia共享链接库为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。作为一种改进,所述的返回值包括如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。作为一种改进,所述的重载分配内存操作包括以下步骤(1)初始化操作定义一个新的指针,用来做开辟内存之后的指针;建立一个变量和分配内存对应的变量,判断变量的值如果这个值是0,那么设置这个值为1,防止分配空地址,如果不是,直接进入下一个阶段;(2)开辟内存用alloc函数分配内存,使用一个指针指向它;(3)判断异常如果分配不成功,汇报异常,调用系统的分配内存函数,如果分配成功,返回上一步建立的指针。作为一种改进,所述的重载释放内存操作是使用函数来重载释放内存操作,如果释放内存的指针不为空,使用函数,如果为空,返回空。与现有技术相比,本专利技术的有益效果是首先,效率高,通过去除两个函数的通用性,提高了分配和释放内存空间时候的性能;其次,更新了动态链接库,用预链接的方法链接所有的共享链接库,这样可以在不削弱程序扩展性的前提下,大幅度减少程序启动时花在重定位上的动态链接时间;最后,使用专用的命令,减少可执行文件的执行规模,提高效率。附图说明图1是重载new函数的流程图。图2是重载delete函数的流程图。具体实施例方式下面结合附图,通过具体实施例对本专利技术进行详细说明。,包括以下步骤(1)分配内存(new)和释放内存(delete)的重载为了重载new/delete操作,本专利技术修改了/qt-2.3.9/src/qobject.cpp、qobject.h和qsignal.cpp、qsignal.h四个文件中的部分代码。为了能重载的new/delete操作能为所有的Qtopia函数使用,本专利技术选择了在qobject.h和qobiect.cpp中重载new/delete操作。QObject类是所有Qt对象的基类,它被大多数的Qt库类所继承,提供了一些Qt最基本的功能如定时器、对象管理等。而作为QObject的成员函数的new/delete操作也会被子类继承,同时可以屏蔽作为全局声明的原new/delete操作。①重载new操作首先,需要在qobject.h和qsignal.h中重载new操作的函数声明为void*operator new(size_tsize);在重载时,很重要的一点是函数提供的行为要和系统缺省的new操作一致,也就是要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况。有关返回值的部分很简单。如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个std::bad_alloc类型的异常。但事情也不是那么简单。因为new操作实际上会不只一次地尝试着去分配内存,它要在每次失败后调用出错处理函数,还期望出错处理函数能想办法释放别处的内存,这将是一个循环的过程。这个循环只有在两种情况会跳出一、在指向出错处理函数的指针为空的情况下,调用系统new操作并跳出循环;二、内存分配成功并跳出循环。new操作默认有六种重载形式,如下表所示。 本专利技术只重载了分配单块内存的第一种,原因首先,它是被调用最多的一个;其次,其余5种重载形式,包括其他一些自定义的重载形式都会在本身的函数体内部调用它。所以只要正确重载了void*operator new(std::size_t count),事实上就完成了其他new操作重载形式的重载工作。根据以上分析,我就可以给出具体重载new操作算法如附图1。②重载delete操作重载delete操作的函数声明为void operator delete(void*memoryToBeDeallocated);由于本专利技术使用malloc()重载了new操作,所以必须用free()来重载delete操作。混用new、free或者malloc、delete会带来难以估量的风险。delete操作与delete3操作符的关系和new操作与new操作符的关系一样。因此只能重载其中的delete操作。与new操作类似,delete也需要考虑到如果要求释放的是空地址的情况。在出现这样情况,可以不做任何操作,直接将NULL返回。根据以上分析,本专利技术就给出具体重载delete操作流程如附图2。(2)预链接Qtopia共享链接库 在本次实验中使用编译器支持预链接,所以本文使用了编译器自带的prelink程序。本专利技术为distribution/lib和distribution/bin目录下所有的可执行文件预链接了共享链接库。并且由于PC及目标Intel XScale PXA 255采用的目录结构都是标准的Linux目录结构,所以prelink.conf文件中指明的共享链接库的位置并没有发生变化。所以,可以将PC上的prelink.conf文件中与Qt相关部分保留之后拷贝到PXA 255本文档来自技高网...

【技术保护点】
一种嵌入式系统开发平台图形库的性能优化设计方法,其特征在于,包括以下步骤:(1)分配内存和释放内存的重载:①分配内存的重载:在重载时,函数提供的行为要和系统缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处 理函数;处理好0字节内存请求的情况;②释放内存的重载:在出现要求释放的是空地址的情况情况,不做任何操作,直接将NULL返回;(2)预链接Qtopia共享链接库:为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopi a相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模:减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈天洲郑臻炜黄江伟曹明腾
申请(专利权)人:浙江大学
类型:发明
国别省市:86[中国|杭州]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1