>
首页 » 业界动态 » 最新8051编译器,利用减少30-50%的代码

最新8051编译器,利用减少30-50%的代码

作者:  时间:2008-10-15 22:06  来源:EDN China
2008年11月10日,澳大利亚昆士兰州Acacia Ridge. . . HI-TECH Software今天推出一款“全知”ANSI C编译器,增加了DMIPS/MHz并降低了Silicon Labs基于8051混合信号MCU系列(包括超低功率、单节电池供电的C8051F9XX)的耗用功率。

  通过大幅优化上下文大小和寄存器在C语言程序所有模块中的覆盖情况,面向Silicon Labs 8051 MCU系列的HI-TECH C® PRO减少了中断延迟、代码大小以及对SRAM的使用。这样做使代码密度提高,程序执行所需的指令周期减少。更少的指令周期意味着CPU可以更多时间处于睡眠模式,从而进一步降低低功耗Silicon Labs器件的功耗。

  使用Silicon Labs的Dhrystone V1.1基准和22.11 MHz时钟,HI-TECH的OCG编译器与非OCG编译器相比,DMIPS/MHz提高了55%以上,代码大小则降低了49%。(表1)
Dhrystone V 1.1 Benchmark
  代码大小 SRAM DMIPS
HI-TECH PRO 2939 5527 2.91
non-OCG Compiler 5763 5540 1.87
区别 -49.0% -0.2% +55.4%

  利用HI-TECH的C PRO编译Silicon Labs的以太网boot loader程序,可以减少30%的代码和20%的SRAM使用。(表2)

SiLabsEthernet Boot Loader (8051F340)
  代码大小 SRAM
HI-TECH PRO 6708 955
OCG 编译器 9584 1193
区别 -30% -20%

  更快速的中断,降低20%的消耗功率-HI-TECH C PRO利用“全知代码生成(OCG)技术,全面搜集整个程序中每个寄存器、堆栈、指针、对象以及变量说明中的数据。它使用这些信息来优化整个程序中的寄存器使用、堆栈分配和指针。它还能够确保变量的一致性和模块间的对象声明,并去除无用的变量和函数。

  没有OCG功能的编译器独立编译每个代码模块,对来自程序其它部分的信息一无所知。因为它们不知道整个程序会用到哪些寄存器,所以通常情况下,它们必须保留所有八个通用寄存器,以及每次中断所需的其它片上资源。这些步骤要求多达48个时钟周期。相反,OCG编译器对整个程序中的每个变量、寄存器以及指针信息都有全面的了解。因为它准确知道中断会用到哪个寄存器,所以它能够以程序编辑时的状态为基础,动态决定上下文大小。由OCG编译器产生的代码在中断程序过程中可能不需要保留所有寄存器,因此能够节省非OCG编译器中所浪费的高达48个周期。

  考虑这样的一个应用:以8kHz采样一个音频输入,利用10位ADC将采样的音频转换为mu-law编码(8位,用于电话通信),然后通过RS232串行电路以115,200波特率进行传输,同时处理音频信号并驱动声量计(VU meter)显示当前的音频水平。

  波特率会对CPU时钟速度产生限制。时钟速度必须是波特率(例如115,200)的整数倍,同时还必须足够快,每次采样时每秒钟都能执行800次完整的指令序列。

  非OCG编译器针对Silicon Labs单电池供电C80519XXF所产生的代码,每次数据采样平均会有108个周期来执行中断服务程序和主循环。最大的时钟周期数为135,需要的时钟频率为1.08 MHz。但是,1.08 MHz并不是115,200波特率的整倍数,所以时钟频率必须增加到1.1152MHz。在这样的时钟频率下,C8051F9xx的平均消耗为248μA。

  利用HI-TECH C PRO编译同样的程序,所产生的代码执行时只需要93个周期,最大周期数为110,时钟频率为880 kHz。根据整数倍原理,最接近的时钟频率为921.6 kHz。在这样的时钟频率下,C8015F9XX的平均消耗为202μA,也就是说,比非OCG编码的执行节省了22%。

  去除对存储空间限制的要求-Silicon Labs的C8051微控制器具有分层存储架构,拥有6个不同但是重叠的存储空间。编译器供应商提供C语言扩展,允许程序员手动制定每个变量所需的存储空间,从而提高读取速度。但是这样的手动制定使得代码不可移植,而为了获得可能是最好的结果,这样做同时也增加了程序员的工作量。但是,随着程序开发的进展,变量到存储空间的最优化分配可能无法实现,而这样也就导致了代码整体性能的下降。

  HI-TECH C PRO完全解决了这一问题。因为它了解每个变量的使用频率以及其所依靠的变量是哪个,所以它能够优化指针,并将对象安置在最为有效的存储空间内。根据它们各自的尺寸以及被引用的次数,全局和静态变量被分配到可利用的存储空间。函数参数和自动变量被分配到被编译过的栈空间内。扩展内存中读取数据所需要的多余代码被最小化或干脆去掉。编译器自动允许那些其函数在同一时间内未被激活的变量共享同一内存,从而减少了高达80%的RAM使用。这些过程中,没有手动编程或者是C扩展。

相关推荐

u-blox发表具备四频2G向后兼容的全球最小 LTE Cat M1和 NB-IoT多模模块

u-blox  iot  lte  2018-01-23

u-blox与Atoll Solutions携手为印度的智慧城市提供易于使用的LPWA技术

u-blox  IoT  LTE  智慧城市  2017-08-12

u-blox发表可支持全球IoT与M2M应用的最精巧LTE Cat M1/NB1多模模块

u-blox  LTE  iot  2017-07-13

u-blox新款150 Mbps 4G LTE语音/数据机,支援亚太与拉丁美洲采用的Band 28频段

u-blox  4g  Band28  FDD-LTE  2015-04-09

全球最快的车用4G LTE模组现已通过北美所有主要网路的认证

u-blox  LTE  RIL  2014-12-18

中国TD强芯之旅:从无芯到强芯的飞跃

TD  4G  2014-01-17
在线研讨会
焦点