基于ARM处理器的软件优化设计

发布者:导航灯最新更新时间:2015-04-16 来源: eechina关键字:ARM处理器  软件优化 手机看文章 扫描二维码
随时随地手机看文章
引言

随着嵌入式系统在工业控制、汽车系统、家庭网络、医疗卫生、无线技术等领域内的大量应用,嵌入式系统开发者必须面对务种复杂的挑战,其中就包括如何在代码性能和系统成本之间进行平衡。在这方面,ARM处理器可以提供给开发者业界领先的技术方案ARM Cortex系列提供了一个标准的体系结构来满足各种技术的不同性能要求,是专门针对功耗和成本敏感的嵌入式应用领域实现高性能而设计的,它大大简化了编程的复杂性,其成熟的技术使ARM架构成为各种应用的上佳选择。

ARM Cortex处理器的统一技术是Thumb-2技术,它以现有的ARM技术为基础,综合了ARM指令和Thumb指令的优势,对优化嵌人式软件设计具有独到的优势,提供了最佳的代码密度,能更合理地使用存储器,对于靠近处理器内核的高速存储器至关重要,即使只节省小部分内存,也将大大提高系统的性能,大幅降低功耗。

1 Thumb-2 指令简介

并非所有的运算都能够映射到Thumb指令集,有时需要多条Thumb指令来模拟一条32位指令的任务。而且Thumb指令不能访问协处理器,不能使用异常中断指令,不支持媒体功能,当应用中有这些需求而且对存储器窄问要求较高时,必须混合使用ARM指令和Thumb指令,处理器内核根据需要切换到Thumb状态以获取高代码密度或切换到ARM状态以获取出色的性能。在开发阶段,为r充分利用存储器,需要反复调整哪些代码使用ARM指令、哪些代码使用Thumb指令。往往只有等到软件和硬件完成后,才能最终决定ARM/Thumb指令的使用方式,这些因素会使开发流程变得非常复杂。

Thumb-2技术足对ARM架构的非常重要的扩展,它可以改善Thumb指令集的性能。Thumb-2指令集在现有的Thumb指令的基础上做了如下的扩充:

· 增加了一些新的16位Thumb指令来改进程序的执行流程

· 增加了一些新的32位Thumb指令以实现一些ARM指令的专有功能。

· 扩充原有的ARM指令,增加了一些新的指令来改善代码性能和数据处理的效率。

使用Thumb-2指令就不需要在ARM/Thumb状态之间反复切换了,代码密度和性能得到的显著的提高。

2 使用Thumb-2指令优化设计

对于已经有ARM处理器开发经验的嵌入式开发工程师析言,使用Thumb-2技术是非常简单的,因为Thumb-2技术是在ARM和Thumb基础上经过创新后发展起来的,它继承了原有的基本编程方法,同时具备ARM/Thumb不可比拟的优越性。开发人员在设计嵌入式软件时,只需要重点关注对整体性能影响最大的那部分代码设计,就能够平衡好性能、代码密度和功耗之间的关系。

2.1 减小汉名(Hamming)距离

表1汉名距离变化对比
1.gif 

如表1所示,两组代码都是用于计算表达式(x1+x2)x(x3-x4)的值,分别使用3条指令束实现。每条指令先成的功能、字书数、寄存器的使用数目、操作码都完全一样,不同之处就是各寄存器操作数的二进制编码不同。

Rd代表目标寄存器,Rn和Rm代表源操作数寄存器。执行原代码时,Rd的比特位变化4次,Rn和Rm分别变化3次和5次,操作数总的比特位变化12次。执行优化后的代码时,操作数总的比特位变化为6次,仅为原代码的一半,能有效地降低指令执行时的功耗。

2.2擅用16位常数指令

Thumb-2指令集中增加了2条关于16位常数的新指令。MOVW可以把一个16位常数加载到寄存器中,并用0填充寄存器的高16位;另一条指令MOVT可以把一个16位常数加载到寄存器的高16位中。这两条指令组合使用就可以把一个32位常数加载到寄存器中。

操作32位立即数或是访问外设,都需要把32位常数加载到寄存器中。对于原来的ARM/Thumb指令系统,因指令编码位数限制.最多只能使用12位常数,且其有效位数只有8位,另外4位用于移位。对任意一个32位的立即数或者一个地址值读取到寄存器需要使用到LDR伪指令,编泽器把该32位数据放在数据缓冲区中,同时用基于PC的LDR指令读取该数据,程序执行时,会在处理器中引起额外的开销,这些开销来自于需要额外的时钟周期使数据端口能够对指令流进行访问。

用两条指令把32位常数分成两个16位常数分两次加载到寄存器中,意味着数据直接在指令流内部,不再需要通过数据端口来访问。相对于LDR伪指令方式,这种解决办法可以消除通过数据端口访问指令流的额外开销,进而提高性能,降低功耗。

2.3灵活应用位操作指令

嵌入式软件开发者经常会碰到位操作方面的问题,如需要对某个变量中的某几位赋值或复位。提取寄存器的部分数据位信息,寄存器中插入固定比特信息等,开发人员往往采用逻辑运算指令和移位操作指令的组合来实现。如表2所尔,两组代码完成的功能一样,把寄存器R1和寄存器R2的有用信息集中压缩到寄存器R0中,以节省寄存器。R1的有用信息为R1[15:0],R2的有用信息为R2[24:8]。对于原代码,因为需要屏蔽寄存器R1和R2的16位数据,需要16位常数参与,所以使用MOVW指令把16位常数引入,完成程序功能共用了4条指令,还额外使用寄存器R3来存放中间变量。优化后的代码只需要一条指令即可实现,而且不需要额外的寄存器参与计算。

表2位操作指令对比
2.gif 

除PKHBT指令外。Thumb-2技术还提供PKHTB、BFC、BFI、SBFX、UBFX等位操作指令。这样,开发者进行比特位的插入和抽取所需的指令数目就可以明显减少,使用压缩的数据结构也会更加方便。而代码对寄存器的需求也会降低。[page]

2.4 选择字节

对于习惯使用高级语言编程的开发者,大都喜欢用if-then-else语句来控制程序流程.但高级语苦编写的程序最终都要转换为体现机器指令的汇编程序,往往一条高级语占语句需要转换成很多条汇编指令,除编程方便外,高级语言在执行效率和存储空间上都没有优势。Thumb-2指令中提供一条类似于if-then-else语句的指令,具体格式如表3所示。

使用SEL指令能够实现程序的流程控制,而且一条汇编指令实现了4条if-then-else语句的功能,只是每条分支只能为字符型数据赋值,相当于c语言中的4个条件运算符语句。

表3 SEL指令
3.gif 

2.5寄存器倒转

一些强调算法(如FFT)的程序通常要求把源寄存器的hit[n]赋值到目标寄存器的bit[31-n],比特倒转指令RBIT就能够很好地实现。如果不使用该指令,实现同样的功能会需要很多条移位指令和逻辑操作指令才能完成,同时还需要一个保存中间变量的寄存器。而使用比特反转指令能明显降低需要的指令的数目和节约寄存器。

Thumb-2指令中的寄存器倒转语句如表4所示,包含比特倒转、字节倒转及带符号倒转。

表4倒转指令集
4.gif 

对于一些编码/解码或加密/解密程序通常要求对数据进行高低字节互换,字节倒转指令REV就能够很好地实现。既降低指令条目数量,又节省寄存器空间,提高软件执行效率。

2.6实现跳转表

使用跳转表来控制程序的执行方向足高级语言的一个常见特性,使用ARM和Thumb指令集都可以很好的实现这个功能。使用ARM指令集一般是为了生成高性能的代码,编泽器会以代码密度为代价对性能进行优化。而Thumb编译器则会使用压缩的数据表来尽可能的降低代码大小。

Thumb-2指令集引入了两条跳转表指令TBB和TBH,分别对应字节分支跳转和半字分支跳转。它综合了ARM/Thumb的优点,在压缩的数据表上可以使用最少的指令来实现跳转表功能,最终可以以最小的代码和数据实现最优的性能。

2.7 改善小额数值运算速度

对于普通的控制系统或数据采集系统,精度往往并不要求很高,12位数据已经足够,但ARM指令和Thumb指令都不提供12位立即数的相关指令(前文已经说明,ARM指令中的12位立即数的有效位数是8)。ThurIlb-2技术提供2条12位立即数参与加法和减法运算的指令,指令格式如表5所示,利用这2条指令能够改善数据处理速度。

表5 12位立即数的算术运算
5.gif 

特别是闭环控制系统,需要根据预设值和反馈值计算偏移量,并根据偏移量来控制被控对象。预设值通常是一个常量,在系统运行过程中都不会改变。习惯于高级语言编程的开发者喜欢使用宏定义的方式来设置该常量,但读取保存在内存中的常量会降低数据处理速度,如果把常量保存在寄存器当中则浪费一个非常宗贵寄存器。针对预设值不易改变的情况,直接使用12位立即数来表示该预设常量并直接参与算术运算的方式既可以节约存储空间,还能够改善数据处理速度,而且与12位AD转换器做反馈采样环节刚好对应。

2.8最大限度地使用寄存器

像ARM这样的load-store体系结构的处理器上,访问寄存器中的数据要比访问存储器中的数据效率高很多,为软件变量分配寄存器要远比分配存储空间性能优越。

ARM Cortex处理器共有14个通用寄存器,实际工程应用软件巾的变量数大多超出14个,但数值较小,可以把多个变量存放在一个寄存器当中。还可以让不同函数的局部变量对寄存器进行时分复用,以充分发挥寄存器的优势。

2.9其他

Thumb-2技术提供2条过零检测并跳转的指令CBZ和CBNZ。分别对应检测到零跳转或检测到非零跳转。该指令可以被用来替换常用的一个指令序列:与零比较,以及随后的跳转指令,这样的指令序列通常被用来检查指针是否为空。Thumb-2指令集中还增加了访问协处理器的指令,这样Thumb-2代码就可以直接支持欠量浮点防处理器,以及其他的协处理器。配合其他访问系统寄存器的指令。整个应用程序就都可以用Thumb-2指令来实现,不必再切换的ARM状态才能实现一些特殊的功能。

3 结束语

在一个应用程序中,要实现最好的性能.就需要编写优化的汇编程序。只不过是对性能影响最大的关键程序才值得优化。可以使用性能分析器或者指令周期计数工具来找这些敏感的关键程序段。优化程序的基本思想就是尽可能地压缩代码尺寸以节省存储空间,尽可能提高程序的执行效率以获得更高的性能,并降低功耗。
关键字:ARM处理器  软件优化 引用地址:基于ARM处理器的软件优化设计

上一篇:基于ARM的嵌入式系统程序开发要点(五)
下一篇:Cortex-M3的异常处理机制研究

推荐阅读最新更新时间:2024-03-16 13:58

ARM处理器简介及RISC设计要点
第一ARM处理器简介及RISC特点 ARM处理器简介 ARM(Advanced RISC Machines)是一个32位RISC(精简指令集)处理器架构,ARM处理器则是ARM架构下的微处理器。ARM处理器广泛的使用在许多嵌入式系统。ARM处理器的特点有指令长度固定,执行效率高,低成本等。 RISC设计主要特点 1、指令集——RISC减少了指令集的种类,通常一个周期一条指令,采用固定长度的指令格式,编译器或程序员通过几条指令完成一个复杂的操作。而CISC指令集的指令长度通常不固定。 2、流水线——RISC采用单周期指令,且指令长度固定,便于流水线操作执行。 3、寄存器——RISC的处理器拥有更多的通用寄存器,寄存器操作较多。
[单片机]
<font color='red'>ARM处理器</font>简介及RISC设计要点
ARM处理器系列介绍
众所周知,ARM处理器的应用广泛,现在就为大家介绍一些基于ARM体系结构的处理器: ARM7 ARM9 ARM9E ARM10E SecurCore ARM11 ARM处理器简介 下面我将从上述列举的几个处理器,来给大家介绍ARM处理器 ARM7系列 ARM7系列处理器是低功耗的32位RISC处理器。主要用于对功耗和成本要求比较苛刻的消费类产品。ARM7系列的处理器还支持16位的Thumb指令集。ARM7系列市场上包括ARM7TDMI、ARM7TDMI-S、ARM7EJ-S和ARM720T! ARM7系列处理器应用范畴 个人音频设备(MP3) 接入级的无线设备 喷墨打印机 数字照相机 PDA
[单片机]
解答arm处理器的七种工作模式
ARM处理器存在七种工作模式:用户模式、快速中断模式、外部中断模式、管理模式、数据访问中止模式、未定义指令中止模式、系统模式。除了用户模式外,其它六种均为特权模式。处理器模式可以通过控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能访问一些受操作系统保护的系统,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。 用户模式(usr):属于正常的用户模式,ARM处理器正常的程序执行状态。 快速中断模式(fiq):用于处理快速中断,对高速数据传输或通道处理。 外部中断模式(irq):对一般情
[单片机]
解答<font color='red'>arm处理器</font>的七种工作模式
ARM处理器出货量超过100亿个
  ARM宣布由其合作伙伴所出货的处理器总量已超过100亿个。ARM公司于1991年开发出其第一个嵌入式RISC内核——ARM6™处理器;如今,ARM公司的半导体合作伙伴所生产的基于ARM技术的处理器每年的出货量已近30亿个。   “ARM的合作伙伴截止目前的累计出货量,足以使地球上每一个人拥有一个以上的基于ARM技术的处理器。”ARM公司首席执行官Warren East表示。“共计100亿个基于ARM技术的处理器已投入使用,这是ARM发展历程中的一个重大里程碑,同时也体现了ARM®处理器架构被全球主要电子公司中的绝大部分所采用,并且用于最广泛的应用领域这一增长趋势。”   ARM处理器产品线覆盖了微处理器应用的每一个领域,从
[嵌入式]
三星ARM处理器S3C4510B的HDLC通道使用和编程
简介:本文介绍MPC8250的结构与特点,并与 MPC860的特点进行对比,在此基础之上分析MPC8250应用于宽带接入产品的优势所在。最后提出一种充分利用MPC8250优点的接入路由器硬件设计方案。 1:S3C4510B简介 S3C4510B(以下简称4510)是韩国三星公司开发的一款基于ARM7TDMI架构的16/32位高性能微处理器。具用丰富的外围接口,如以太网,HDLC等,可灵活配置,适用于多种应用。4510具有以下性能特点: ◆ 8K字节的内部CACHE,也可用作内部SRAM ◆ 两线IIC接口,作为IIC主器件使用 ◆ 以太网控制器 ◆ 双通道HDLC控制器 ◆ 双UART ◆ 双GDMA通道 ◆ 两个32位定时器
[单片机]
ARM处理器总结
ARM处理器总结(一) ARM处理器简介 ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。 ARM处理器状态 ARM处理器有两种工作状态:ARM状态,执行32位字对齐的ARM指令;Thumb状态,执行16位半字对齐的Thumb指令。在程序执行过程中两种状态可切换,并不影响处理器的工作模式和寄存器内容,在开始执行代码时,处理器需要在ARM状态。 ARM处理器模式 七种:用户模式,快速中断模式,外部中断模式,管理模式,数据访问终止模式,系统模式和未定义指令中止模式。模式可通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,某些被保护的系统资源进制被访问
[单片机]
嵌入式软件电源能耗优化的解决方案
开发由 电池 供电的设备,尤其是对设备的待机或操作时间要求比较严格的系统,例如移动电话,降低系统整体的能耗变得越来越重要。 因此采取全面的措施来降低 电池 能量的消耗是设计电池供电设备的重要部分。 典型的节能措施包括: 1 选择有节能属性的元件 2 提高系统集成度 3 调整CPU主频 4 调整 电源 供给 5 选择带节能属性的、高速缓冲存储器和片上内存的微 控制 器 然而,只有通过软件全程的控制各个消耗电池能量的组件,充分的发挥其硬件的节能属性,才能达到最佳的节能效果。能耗是电流,电压和时间的乘积,控制软件对这几个参数都有很大的影响。因此,软件工程师需要经常不断的尝试确定这三个参数在不同的操作模式下的最佳配置,以达到
[电源管理]
基于ARM处理器与GPRS技术的水厂监控系统
目前远程监控主要有以下方式: 短距离长线监控、通过市话网、通过Internet 网络、通过自组网络(CDPD网)及通过数传电台监控。 短距离长线监控和通过自组网络自行建设通信网络, 信号质量得以保证, 但建网初期投资巨大, 运营期间维护耗费较高; 通过市话网和Internet 方式, 通信效果好, 信号量大, 运营费用相对低廉, 但接入网络受到限制, 且网络运行效果取决于网络运营商, 难以达到工业现场覆盖面; 数传电台出现较早、应用广泛, 信号传输实时性好、运行费用低, 但建网初期投资巨大、传输范围有限, 易受空间无线信号干扰。 通用分组无线业务GPRS(General Packet Radio Ser -vice) 是在现有GSM
[单片机]
基于<font color='red'>ARM处理器</font>与GPRS技术的水厂监控系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved