首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

1.4 除法和求余
       
  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的判断语句来完成,考虑如下的应用:
                    (4)对于一些特殊的除法和求余运算,采用查找表的方法也可以获得很好的运行效果。
          在除以某些特定的常数时,编写特定的函数完成此操作会比编译产生的代码效率高很多。ARM的C语言库中就有二个这样的符号型和无符号型数除以10的函数,用来完成十进制数的快速运算。在toolkit子目录的examples\explasm\div.c和examples\thumb\div.c文件中,有这二个函数的ARM和Thumb版本。
        2  面向ARM的程序优化在嵌入式TCP/IP协议实现中的应用
       
  笔者采用ATMEL公司的AT91RM9200微处理器,配合以太网物理层驱动芯片(DM9161)构建面向网络的嵌入式系统硬件平台,如图2所示。在此平台上,实现基于ARM微处理器的嵌入式TCP/IP协议处理。
        基于ARM的嵌入式系统直接面向以太网数据,典型的以太网数据封装格式如图3所示。根据以上的优化方法,在变量定义时需要考虑最佳的存储器布局,使得各种类型的变量能以32位的空间位基准对齐,对于功能函数中参加运算的数据应尽量采用32位的数据进行处理。

       


       

继承事业,薪火相传
返回列表