嵌入式软件代码压缩技术剖析.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对于嵌入式软件而言,代码尺寸是越小越好。压缩代码以适应受到成本或空间限制的存储子系统已经成为嵌入式系统开发的一项重要事务。ARM、MIPS、IBM以及ARC都提供了降低存储器占用的技术,本文将对这几种架构中代码压缩技术的实现进行比较分析。 如今,存储子系统的成本高于微处理器已不再稀奇。因此,选择一款能节约存储成本的处理器就变得很有意义。编写紧凑的代码只是事情的一个方面,而处理器的?指令集对存储器的消耗同样影响很大。对于代码密度很差的处理器而言,无论怎样绞尽脑汁地去压缩你的C源代码都于事无补。如果你关注存储器的消耗,选择恰当?的处理器并精心调整代码是明智的。   并不是所有的处理器都拥有或需要代码压缩,只有32位的RISC(精简指令集计算机)处理器需要代码压缩,因为RISC处理器代码密度较差。?RISC处理器在过去是设计用于通用计算机和工作站,在其设计时认为存储器价格便宜。尽管存储器价格可能便宜,但如果能占用更少的存储器不是更便宜吗?对?于蜂窝电话以及其他成本控制严格的嵌入式系统应用而言,在RAM或ROM上5美元的成本差异,就能导致量产时利润的巨大差别。通常,存储器的大小是固定?的,而产品的功能特性却各异。紧凑的目标代码意味着可以实现更多的自动拨号、更好的语音识别能力,或者可能是更清晰的屏幕显示。   在32位嵌入式处理器中,ARM、MIPS以及PowerPC曾是首先寻找出降低其存储器消耗、提高代码密度方法的几种处理器。更早一些的处理?器,如摩托罗拉的68k系列以及英特尔的x86系列,并不需要代码压缩。事实上,其标准代码密度都比RISC处理器的代码压缩模式还要高。   易于使用的Thumb技术   我们先从ARM的代码压缩方案(Thumb)讲起,因为其使用广泛、有很好的支持,是一个典型处理器代码压缩方案,并相当简洁、有效。   Thumb实际上是添加到ARM的标准RISC指令集之上的独立指令集。在你的代码中,你可以通过一条模式切换指令在这两种指令集之间进行切?换。Thumb指令集架构(Instruction?Set?Architecture,?ISA)是由大约36条16位指令组成,仅靠这些指令是完成不了太多任务的,但Thumb指令集包括了基本的加法、减法、循环移位以及跳转指令。通过使用?这些较短的指令替换ARM标准的32位指令,可以将某些代码的规模减小大约20%到30%。但有一些问题需要引起注意:   首先,Thumb代码和标准ARM代码不能混杂使用,必须显式地在两种模式间进行切换,就好像Thumb是一套完全不同的指令集(实际上也是)。这迫使程序员将所有的16位代码与32位代码分开并隔离到独立的模块中。   其次,由于Thumb是经过简化和精简的指令集架构,在Thumb模式中无法完成所有你希望的工作。Thumb模式无法进行诸如处理中断、长跳?转、原子存储器(atomic?memory)操作,或协处理器操作等。Thumb有限的指令意味着仅对基本的算术和逻辑操作有用,其他的任何工作必须使用ARM的标准32位指令集来完?成。   Thumb的限制不仅表现在指令集上,当处于Thumb模式中,ARM处理器将仅有8个寄存器(而不是16个),这些寄存器无法像标准模式下?ARM代码那样进行条件执行和移位或循环移位操作。在标准ARM代码和Thumb代码间进行参数传递并不困难,只要将参数放到堆栈中或通过处理器的前8个?寄存器就可以了。   从标准模式到Thumb模式之间的来回切换也要消耗时间,而且还要增加代码。此外,还需要几十个前导(preamble)以及后同步指令?(postamble)来组织指针并清空CPU的流水线。如果在Thumb模式中运行的代码小于几十条指令,就不值得为之付出这样的开销。   最后,Thumb还对于性能有着少许的影响。通常,使用Thumb指令对代码进行压缩会导致代码运行速度降低大约15%,这主要是由于在16位?模式和32位模式间切换所引起的。Thumb指令还不如32位的标准指令灵活,因此,和32位代码相比,常常需要更多的指令来完成同样的工作。从积极的一?方面来说,由于其指令长度只有32位指令集的一半,Thumb使得缓存的使用效率更高。   如果任务能够在这些限制下完成,Thumb可以节约不少成本。Thumb技术已经得到每一款ARM处理器的支持,无论用户使用与否,多数ARM编译器以及汇编程序都支持Thumb指令集。因此,采用Thumb的体验应该相当轻松。   MIPS处理器   理解了Thumb技术后,MIPS16e就没什么新奇的了。一些MIPS处理器中增加了另外的16位指令集,与ARM系统非常类似。?MIPS16e指令集包括了一组16位的标准MIPS算法、逻辑以及跳转指令的简化版本。其使用和Thumb一样,也需要在标

文档评论(0)

qtrt148 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档