图像屏幕尺寸绵放的C程序优化技巧

出处:21IC中国电子网 发布于:2009-09-21 11:43:56

  引 言

  嵌入式系统的部件是嵌入式处理器。在众多的处理器中,ARM是专为嵌入式应用而设计的处理器,由于其低功耗、高性价比和易扩展性等特点,在嵌入式系统中得到了为广泛的应用。在许多成功的32位嵌入式系统中,ARM处理器都是其组成部分。ARM内核已被广泛应用于移动电话、掌上设备以及种类繁多的便携式消费类产品中。随着ARM处理器越来越广泛的应用,如何提高代码的执行效率已成为工程师关注的问题,同时如何在实时嵌入式应用中,通过代码优化以减少消耗过多的CPU运行时间已成为人们关注的焦点。软件开发中,常用的代码优化技巧有“循环展开”、“减少外存访问”、“考虑CPU带宽”、“循环减计数”、“循环变量数据类型”、“使用SWITCH取代条件判断”等。而图像在不同屏幕尺寸之间缩放的程序是嵌入式领域常常用到的功能。这里就以实现这样一个常见功能的程序为例,说明程序优化的技巧。

  1 实例分析

  程序的目标是将一个长宽为240×160,格式为RGB565的显示缓冲区的内容映射到长宽为320×240,格式也为RGB565的显示缓冲区内。因为源数据宽度是240点,所以,放大到目的区域的时候,就需要每3个源数据点中,重复1点的数据,变成4点,放到目的显示缓冲区中。同样,每2行源数据也要重复1行,变成3行,放到目的显示缓冲区中。源数据和目的数据分别定义如下(保证源显示缓冲区和目的显示缓冲区都是4字节对齐起始的):

  注:以下所有程序均是使用ADS1.1编译,CPU主频为100 MHz,使用ARM7EJ-S为目标处理器,小端编译方式,测试的时间是以所有的程序和数据均是Cache全命中为前提测试得到的。

  2 原始程序

  下面这段程序是没有经过任何优化的程序,仅仅实现了相应的功能要求,运行时间为10 ms。

  3 优化步骤

  ,采用循环展开的技巧进行优化,也就是尽量减少内层循环的次数。这里在行循环中,由原来的每次处理1行源数据,一共循环160次,改成每次处理2行源数据,一共只需要循环80次。同时,在行内部的列循环中,由原来的每次处理1个源像素点,一共循环240次,改成1次处理3个源像素点,一共只需要循环 80次。运行时间缩短为8 ms。


  第二,因为ARM处理器的带宽是4字节,所以,取数据时也使用4字节的方式是效率的,程序设计时也要尽量利用这个特点提高效率。下面就利用这个特点,每次取源数据时都取4字节。因为行内部是每3点要重复1点,因此,行内部循环改为每次处理6个像素点,这样,又进一步减少了循环次数。运行时间缩短为4 ms。

  第三,访问外存往往是程序运行的瓶颈,因为外存的速度一般远远低于CPU运行速度,所以,在编程的过程中,要尽量减少对外存的访问。下面,将行循环中重复写入的那行在上一行生成的过程中直接完成,减少了拷贝重复行过程中读取1行的时间。运行时间缩短为3 ms。

  结 语

  本文以图像在不同屏幕尺寸之间缩放的程序为例讲解了代码优化技巧方法,给出了源代码进行探讨,并通过实验得以证实。希望有助于读者编写出在提高执行速度和减小代码尺寸方面更高效的C源代码。

关键词:图像屏幕尺寸绵放的C程序优化技巧C程序

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

松夏 Proteus7.10仿真加载Hex程序运行仿真看效果 Keil3新建工程编译C程序生成Hex
广告
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站客服电话

0571-85317606

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!