引 言
嵌入式系统的核心部件是嵌入式处理器。在众多的处理器中,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。