ARM程序优化及其在嵌入式TCP/IP协议实现中的应用介绍

发布者:HarmoniousDream最新更新时间:2018-03-10 来源: eefocus关键字:ARM  程序优化  TCP  IP协议 手机看文章 扫描二维码
随时随地手机看文章

    随着嵌入式技术的发展,人们对系统的智能化、小型化的要求也越来越高。基于ARM结构的微处理器以其高性能、低功耗、低价格等方面的优势被广泛应用于各种电子产品,特别是一些高端的嵌入式控制应用中,例如移动电话、工业控制、网络通信等方面。ARM技术具有很好的性能和功效,其合作伙伴包括许多世界顶级的半导体公司。可以说ARM技术几乎无处不在。

    TCP/IP互联网协议族在全世界范围内已经成为开放系统互联的协议,它提供了很好的交互操作能力,可兼容多种网络技术。嵌入式技术与TCP/IP技术的结合已经展现出强劲的发展势头和巨大的市场潜力。如何开发面向 ARM的高效代码,尤其是提高类似于TCP/IP协议栈等基础性的软件模块的执行效率已成为每个从事基于ARM的嵌入式系统开发人员必须思考的问题。

 

    面向ARM的程序优化

    开发高效的程序涉及很多方面,包括优秀的算法实现、良好的编程风格以及针对目标的程序优化。程序优化是指软件编程基本结束后,利用软件开发工具对程序代码进行调整和改进,使程序能够更加充分地利用有限的软硬件资源,缩减代码尺寸,提高运行效率的过程。

    在实际的程序设计过程中,程序优化的两个目标(运行速度和代码大小)往往是互相矛盾的。为了提高程序运行效率,就要以牺牲存储空间、增加代码量为代价;而为了减少程序代码量、压缩存储器空间,可能又要以降低程序运行效率为代价。按照优化的侧重点不同,程序优化可分为运行速度优化和代码尺寸优化。随着微电子技术的不断发展,存储空间已不再是制约系统集成的主要因素。面向ARM的程序优化主要是讨论如何在了解汇编语言和编译规则的基础上编写出能够高效运行的C语言程序。

    作为高性能、低功耗的RISC芯片,ARM的C语言编译器已经非常成熟。尽管如此,在编写面向ARM的C源程序时,对程序进行必要的优化仍是提高程序运行效率的有效途径。以下是一些在实现TCP/IP协议过程中用到的比较典型的优化原则和方法,这些技术也适用于其他RISC

    指令集微处理器。

    变量定义

    32位 ARM处理器的指令集支持有符号/无符号的8位、16位、32位整型和浮点型变量类型,这不仅可以节省代码,而且可以提高代码的运行效率。按照作用范围的不同,C语言的变量可以划分为全局变量和局部变量。ARM编译器通常将全局变量定位在存储空间中,局部变量分配给通用寄存器。

    在全局变量声明时,需要考虑最佳的存储器布局,使得各种类型的变量能以32位的空间位基准对齐,从而减少不必要的存储空间浪费,提高运行效率。如:

   49.jpg

    这里定义的四个变量形式相同,只是次序不同,却导致了在最终映像中不同的数据布局,如图1所示。显然第二种方式节约了更多的存储器空间。

    50.jpg

    对于局部变量,要尽量不使用32位以外的变量类型。当一个函数的局部变量数目不多时,编译器会把局部变量分配给内部寄存器,每个变量占一个32位的寄存器。这样short和char类型的变量不但起不到节省空间的作用,反而会耗费更多的指令周期来完成short和char的存取操作。C语言代码及其编译结果如下所示:

    51.jpg

    条件执行

    条件执行是程序中必不可少的基本操作。典型的条件执行代码序列是由一个比较指令开始的,接下来是一系列相关的执行语句。ARM中的条件执行是通过对运算结果标志位进行判断实现的,一些带标志位的运算结果中,N和Z标志位的结果与比较语句的结果相同。尽管在C语言中没有带标志位的指令,但在面向ARM的C语言程序中,如果运算结果是与0作比较,编译器会移去比较指令,通过一条带标志位指令实现运算和判断。例如:

    52.jpg

    因此,面向ARM的C语言程序设计的条件判断应当尽量采用“与0比较”的形式。C语言中,条件执行语句大多数应用在if条件判断中,也有应用在复杂的关系运算(<,==,>等)及位操运算(&&,!,and等)中的。面向ARM的C语言程序设计中,有符号型变量应尽量采取x& lt;0、x>=0、x==0、x!=0的关系运算;对于无符号型的变量应采用x==0、x!=0(或者x>0)关系运算符。编译器都可以对条件执行进行优化。

 

    对于程序设计中的条件语句,应尽量简化if和else判断条件。与传统的C语言程序设计有所不同,面向ARM的C语言程序设计中,关系表述中类似的条件应该集中在一起,使编译器能够对判断条件进行优化。

    循环

    循环是程序设计中非常普遍的结构。在嵌入式系统中,微处理器执行时间在循环中运行的比例较大,因此关注循环的执行效率是非常必要的。除了在保证系统正确工作的前提下尽量简化核循环体的过程以外,正确和高效的循环结束标志条件也非常重要。按照以上所述的“与0比较”原则,程序中的循环结束条件应该是“减到0” 的循环,结束条件尽量简单。应尽可能在关键循环中采取上述的判断形式,这样可以在关键循环中省去一些不必要的比较语句,减少不必要的开销,提高性能。如下面二个示例:

    53.jpg

    fact1 和fact2中通过定义局部变量a来减少对n的load/store操作。fact2函数遵循了“与0比较”原则,省去了fact1编译结果中的比较指令,并且,变量n在整个循环过程不参与运算,也不需要保存。由于省去了寄存器分配,从而给其他部分程序的编译带来了方便,提高了运行效率。

    “减到0”的方法同样适用于while和do语句。如果一个循环体只循环几次,可以用展开的方法提高运行效率。当循环展开后,不需要循环计数器和相关的跳转语句,虽然代码的长度有所增加,但是得到了更高的执行效率。

    除法和求余

    ARM 指令集中没有提供整数的除法,除法是由C语言函数库中的代码(符号型_rt_SDIv和无符号型的_rt_udiv)实现的。一个32位数的除法需要 20~140个周期,依赖于分子和分母的取值。除法操作所用的时间是一个时间常量乘每一位除法所需要的时间:

    Time(分子/分母)=C0+C1×log2(分子/分母)

    =C0+C1×(log2(分子)-log2(分母))

    由于除法的执行周期长,耗费的资源多,程序设计中应当尽量避免使用除法。以下是一些避免调用除法的变通办法:

    (1)在某些特定的程序设计时,可以把除法改写为乘法。例如:(x/y)>z,在已知y是正数而且y×z是整数的情况下,就可以写为x>(z×y)。

    (2)尽可能使用2的次方作为除数,编译器使用移位操作完成除法,如128就比100更加适合。在程序设计中,使用无符号型的除法要快于符号型的除法。

    (3)使用求余运算的一个目的是为了按模计算,这样的操作有时可以使用if的判断语句来完成,考虑如下的应用:

    uiNTCounter1(uintcount)uintcounter2(uintcount)

    {{return(++count`);if(++count>=60)}count=0;

    return(count);}

    (4)对于一些特殊的除法和求余运算,采用查找表的方法也可以获得很好的运行效果。

    在除以某些特定的常数时,编写特定的函数完成此操作会比编译产生的代码效率高很多。ARM的C语言库中就有二个这样的符号型和无符号型数除以10的函数,用来完成十进制数的快速运算。在toolkit子目录的examplesexplaSMDiv.c和examplesthumbdiv.c文件中,有这二个函数的ARM和Thumb版本。

    面向ARM的程序优化在嵌入式TCP/IP协议实现中的应用

    笔者采用ATMEL公司的AT91RM9200微处理器,配合以太网物理层驱动芯片(DM9161)构建面向网络的嵌入式系统硬件平台,如图2所示。在此平台上,实现基于ARM微处理器的嵌入式TCP/IP协议处理。

   54.jpg


    基于ARM的嵌入式系统直接面向以太网数据,典型的以太网数据封装格式如图3所示。根据以上的优化方法,在变量定义时需要考虑最佳的存储器布局,使得各种类型的变量能以32位的空间位基准对齐,对于功能函数中参加运算的数据应尽量采用32位的数据进行处理。

   54.jpg

    嵌入式TCP/IP协议的实现通常采用Linux中的TCP/IP网络结构层次。TCP/IP协议实现网络层和控制层的ARP/RARP、IP、ICMP、 TCP、UDP等协议,直接为HTTP、SMTP、FTP、TELNET等这样的应用层协议提供支持。每个系统都需要具体定义应用层程序和协议软件之间的接口。

   55.jpg

    协议处理的一般流程如图4所示。协议处理过程中需要多次条件判断,对IP地址和TCP数据的校验和处理循环比较是无法避免的,因此可以充分利用“与0比较”的条件判断和“减到0”的循环来优化程序设计。

   56.jpg



    结束语

    除了以上所述的面向ARM的程序优化的原则和方法以外,C语言程序设计本身还有很多程序优化的方法。在上述基于ARM嵌入式系统硬件平台的系统开发过程中,充分利用面向ARM的C程序优化设计方法,可将TCP/IP协议处理模块的可执行代码减少5%以上,执行效率有所提高。实践证明,基于ARM的嵌入式系统设计中,在透彻了解ARM汇编指令的特性和编译过程的基础上,合理地使用程序优化的原则和方法可以有效地提高编译效率和代码执行效率。


关键字:ARM  程序优化  TCP  IP协议 引用地址:ARM程序优化及其在嵌入式TCP/IP协议实现中的应用介绍

上一篇:Cortex-M3处理器的外部中断程序自学
下一篇:基于LPC2104型CPU的汽车行使记录仪分析

推荐阅读最新更新时间:2024-03-16 15:57

第009课 gcc和arm-linux-gcc和Makefile
第001节_gcc编译器1_gcc常用选项__gcc编译过程详解 gcc的使用方法 gcc 文件名 gcc常用选项 一个c/c++文件要经过预处理、编译、汇编和链接才能变成可执行文件。 (1)预处理 C/C++源文件中,以#开头的命令被称为预处理命令,如包含命令#include、宏定义命令#define、条件编译命令#if、#ifdef等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个.i文件中等待进一步处理。 (2)编译 编译就是把C/C++代码(比如上述的.i文件)翻译成汇编代码。 (3)汇编 汇编就是将第二步输出的汇
[单片机]
第009课 gcc和<font color='red'>arm</font>-linux-gcc和Makefile
基于ARM的中英文翻译器设计
  为了改进某焊接设备只能输出打印英文单据的情况,设计了由高性能ARM7控制器——LPC2214为核心的英文转中文翻译器,详细论述了具体的硬件电路和优化的软件算法的设计原理,实验结果表明,翻译器对输入的英文数据量的大小无任何限制,能够显著降低系统硬件资源需求且能大大提升打印速度。大体概念外观如下图所示。   基于某焊接设备存储大量数据需要通过打印机输出,但由于该设备及其配套的微型热敏打印机只能英文打印,不能中文打印的问题,从而影响用户阅读。另外,原有的配套英文打印机具有打印速度缓慢、每一组数据间隔过大,浪费纸张等缺点。因此,为了解决上述问题,根据实际工程项目应用需要,提出一种基于ARM的英文转中文的翻译器设计方案,该设计是在原
[单片机]
基于<font color='red'>ARM</font>的中英文翻译器设计
什么是ARM中的SP(堆栈)和LR?
问题描述 我一遍又一遍地阅读定义,我还没有得到什么是ARM中的SP和LR?我明白PC(它显示下一个指令的地址),SP和LR可能是相似的,但我只是不明白它是什么。你可以帮我吗? 编辑:如果你可以用例子说明一下,那会很棒。 编辑:终于弄清楚LR是什么,还没有得到什么SP。 最佳解决方案 LR是用于保存函数调用的返回地址的 link register 。 SP是堆栈指针。堆栈通常用于在函数调用中保存”automatic”变量和上下文/参数。从概念上讲,您可以将”stack”视为您”pile”您的数据的地方。您将”stacking”保留在一个数据之上,堆栈指针告诉您”high”的数据是”stack”。您可以从”stack”的”to
[单片机]
ARM】移植linux kernel2.6.32注意事项
#三个文件 程老师(1209050967) 19:05:41 链接:http://pan.baidu.com/s/1pLg8V8J 密码:xu5r 程老师(1209050967) 19:06:03 程老师(1209050967) 19:06:31 各位到我网盘把这个三个文件下下来放到你们的ubuntu里面 (gcc4.4.3, linux-2.6.32, roots_rtm_2440) 加sudo 解压后才有/rootfs/dev/console这个文件 sudo tar –zxvf root… /rootfs/dev/console #arm-linux-gcc –v export PATH=$PATH:/home/wu
[单片机]
【<font color='red'>ARM</font>】移植linux kernel2.6.32注意事项
基于ARM9与WindowsCE的车辆GPS定位信息采集系统
GPS可提供连续、高精度、实时的时间基准、三维位置、三维速度、整周模糊度等数据,具有性能好、精度高的特点,因而广泛应用于GPS载波相位测姿、精确制导、SINS/GPS组合导航、嵌入式车辆导航监控等军事与民用领域。而嵌入式系统以其低功耗、小体积、高稳定性和便携等优势,在GPS的应用中占据重要的位置。本文研究基于ARM920T内核的嵌入式微处理器S3C2440和WindowsCE 5.0(简称WindowsCE)的某型军车GPS定位信息的采集与处理。 1 系统硬/软件平台概述 车辆GPS定位信息采集系统的硬件平台结构如图l所示。 该平台可以分为3大模块: 1)微系统核心模块 由基于ARM920T的32位嵌入式微
[单片机]
基于<font color='red'>ARM</font>9与WindowsCE的车辆GPS定位信息采集系统
arm linux 从入口到start_kernel 代码分析 - 7(end)
6. 切换数据 在 arch/arm/kernel/head-common.S 中: 00014: .type __switch_data, %object 00015: __switch_data: 00016: .long __mmap_switched 00017: .long __data_loc @ r4 00018: .long __data_start @ r5 00019: .long __bss_start @ r6 00020: .long _end @ r7 00021: .long processor_id @ r4 00022: .long __mac
[单片机]
jz2440裸机开发与分析:ARM芯片时钟体系2
目标:由上节可知,要想得到FCLK = 400MHz,HCLK = 100MHz,PCLK = 50MHz的时钟需要配置两个寄存器,分别为MPLLCON和CLKDIVN 第一步:先对LOCKTIME初始化 /* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ ldr r0,=0x4C000000 ldr r1,=0xFFFFFFFF str r1, 第二步:对MPLL进行配置,配置为400MHz 由以上公式可以推断: MPLL = (2*(92+8)*12)/((1+2)*2^1) =400 m = 92+8 p=1+2 s=1 再配置也需注意 所以MPLL配置过
[单片机]
jz2440裸机开发与分析:<font color='red'>ARM</font>芯片时钟体系2
ARM Cortex-A8处理器为TI OMAP 3平台带来领先业界的超高效能
TI OMAP3430处理器展现低功率、高效能之多媒体、网页浏览及游戏等众多功能   德州仪器(Texas Instrument, TI)于日前举行的3GSM全球大会中,展出采用ARM Cortex A8处理器核心之 OMAP 3430处理器,并于会中展示包括网页浏览、高分辨率影片、先进Java 多媒体及3D游戏在内的多项手机功能,以及其在电源电效率及效能方面的无限潜能。   德州仪器副总裁暨无线终端产品事业部总经理Alain Mutricy表示:“对OMAP3平台的开发而言,与ARM的合作是相当重要的一步。从OMAP 3平台所表现出来的高延展性,即可验证ARM Cortex-A8处理器的卓越效能。在德州仪器的低功率65纳米制
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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