嵌入式软件代码压缩手艺分解

在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一样,也需要在尺度模式和mips16e模式 之间往返切换,这也将导致支出时刻和增添代码的开销。除非能在“压缩”模式上运行相当长时刻,否则没有需要进行模式切换。其代码压缩效率和arm差不多, 对于年夜都轨范而言,也是20%到30%。
mips16e和thumb都不能对代码进行真正的压缩,它们只是对部门指令供给了可替代的操作码,而且获得的压缩比是依靠于短操作码和长操作 码的总长度的比值。也就是说,依靠于代码所完成的使命,诸如操作系统和间断措置例程等系统级代码根柢就不能使用16位指令,是以不能获得代码压缩下场。一 般的算法,只要不使用任何年夜操作数,就能获得很好的压缩效率。最后,别忘了数据是无法进行压缩的,只有代码能够被压缩。若是你应用代码中搜罗了年夜量的静态 数据结构,所能获得的总存储器节约长短常小的。还有,15%的机能损失踪也许很不值得。另一方面,mips16e和thumb都是免费的(假定你的措置器已 经包含了它们),选用它们的成本很是低。
powerpc的codepack手艺
值得提前声名的是,ibm的codepack体例是各类代码压缩手艺中最复杂的。与thumb和mips16e分歧,codepack系统是真 正对运行代码进行压缩,就仿佛在powerpc软件中运行winzip。codepack会剖析并压缩整个轨范,生成的用户代码必需在运行中解压缩并执行 压缩版本。尽管很复杂,codepack和其它手艺一样供给20%到30%的空间节约。
codepack是一项很有吸引力的手艺。在使用该手艺时,只须和泛泛一样使用尺度工具编译嵌入式powerpc代码就行,codepack甚 至对已有的代码也能使用(无论有没有源代码)。在将代码写入rom或装入磁盘之前,运行codepack压缩工具对代码进行压缩。压缩工具会剖析代码指令 的分布并生成一对专门针对这个轨范代码的键值。当运行压缩后的代码时,拥有codepack功能的措置器使用这一对键值来在运行中解开压缩的代码,就仿佛 直接运行压缩后的代码。解压缩会对措置器的流水线发生很小的延迟,可是其影响被取指延迟以及其它延迟所袒护。对于绝年夜年夜都应用,codepack带来的性 能影响是可以忽略的。
可是,codepack还有一些其它的影响。因为每一个压缩的轨范都有其零丁的压缩键值,codepack素质上既是压缩系统也是加密系统。没 有键值,无论你自己仍是其它任何人都无法运行响应的轨范。若是丢失踪了或者未获得响应的键值,压缩后的轨范只是一堆无用的乱码,这也意味着压缩后的 powerpc轨范不是二进制代码兼容的。除非同时搜罗其解压缩键值,否则无法等闲地和其它系统交流压缩后的轨范。这会使嵌入式系统软件的现场分配稍微有 些复杂。
此外,codepack为每个轨范生成两个键值是因为指令的高16位和低16位是分袂进行压缩的。ibm的工程师发现每一条powerpc指令 的高半字(操作码就在其中)和低半字(其内容凡是为操作数、偏移量或掩码)的分布频度是纷歧样的。对它们分袂使用分歧的压缩算法会使压缩下场比仅使用任何 单一算法要好,这就是codepack对轨范所做的事。
arcompact
arc international公司又采用了此外的代码压缩体例。因为arctangent措置器有用户可界说的指令集,arc(及其用户)可以对指令集进行随心所欲的改削。作为arcompact,arc公司抉择插手一组16位指令来改良其措置器的代码密度。
而arcompact与thumb以及mips16e的区别在于可以将16位代码和32位代码肆意混杂。因为没有模式切换,代码中肆意分布的少 许16位指令无须为之支出什么开销。在任何可能的情形下,arc的编译器的默认设置装备摆设会发生16位操作(为了强制编译器生成32位代码或与旧的措置器连结兼 容,你可以关失踪这个功能)。
arc可以同化分歧长度代码而不必支出响应的开销,是因为其指令架构要比arm和mips新。那些risc架构的指令集(搜罗powerpc) 在指令字中没有指明指令长度的位。诸如arc或tensilica的新伪risc架构,以及像x86和68k旧的架构拥有这些位。无论是出于无意仍是远 见,变长度指令架构因为更紧凑的代码而具优势。
thumb的改良版--thumb-2
就在比来,arm对其代码压缩系统进行了刷新并发布了thumb-2。thumb-2并不是thumb的进级,相反,它是另起炉灶,而且可以完 全庖代thumb和原先的arm指令集。thumb-2有些近似arcompact或摩托罗拉的68k,可以无需模式切换就运行16位与32位同化代码。 总的来说,thumb-2供给的代码压缩效率要略差,但其机能损失踪也较小。
为了做到这一点,arm需要在其操作码映射中找到一个打破口(hole),他们在bl指令(条转并毗连指令,是thumb和arm模式之间切换 的指令)中找到了需要的打破口。在原有的指令集中,bl指令有一些位没有使用,这些原先不决义的位给全新的指令集供给了切换进口。其编码确实不怎么样,但 确实很有用。
thumb-2最年夜的优势在于它是一套完整的指令集,轨范无需切换回“尺度”32位arm模式,原先thumb模式的限制再也没有了。轨范此刻可以措置间断、设置mmu、打点缓存,和真正的微措置器并没什么分歧。
thumb-2仍是需要损失踪必然的机能。尽管没有了模式切换开销,与尺度arm代码对比,它仍是要破耗多一些的thumb-2指令来完成特定的使命。对于arm措置器而言,这些额外的指令(以及额外的周期)会使速度降低年夜约15%到20%

CVD过程中的等离子工艺
推荐学习嵌入式,射频技术的教程
嵌入式组态软件系统的研究
中兴5G室内路由器MC801A有何优势?
验证与确认是功能安全中重要但相互独立的两个主题
嵌入式软件代码压缩手艺分解
光纤及双绞线施工质量的检测方法
电缆护套是什么,电缆护套资料都有哪几种
RPO推出数字光波导触控技术 明年一月全面商用发货
Intel近日发布一款特别的笔记本“NUC M15 Laptop Kit”
中国可再生能源市场发展的三大政策及分析
致初学者:如何学好电子技术
坚果Pro 2S定于8月20日发布,锤子开启提前预热“秀到自己”
FPGA SoC的验证挑战与解决方案
华大北斗HD8120系列芯片助力北斗规模化发展
德国电信承诺到2025年将大多数IT工作负载移至云端
一图搞懂PLC的工作方式
高通公司的第一款5纳米处理器Qualcomm Snapdragon 888就首发了
12个致命的发明 干掉了它们的创造者
福禄克网络推出能够验证和诊断以太网布线的MicroScanner PoE测试仪