Cypress与HI-TECH发布最新编译器,加倍PSoC器件的存储能力
Cypress半导体公司和HI-TECH Software日前宣布了一项新的编译技术,能够扩展动态可配置PSoC混合信号阵列的存储容量和性能。这款新的ANSI C编译器,即面向PSoC混合信号阵列的HI-TECH C PRO,开拓了HI-TECH的Omniscient Code Generation(全知代码生成,OCG)技术,能够从根本上降低PSoC的代码量。
PSoC混合信号阵列集成了可编程的模拟和混合功能,带有一个8位MCU内核,高达32KB闪存和高达2KB的SRAM。能够广泛用于成本敏感、空间受限的消费类应用,包括触摸屏接口、电动机控制以及近感探测及其它。PSoC设备能够进行动态重配,在相同硅片上执行多个独立的功能,因此能够减少元器件数量、缩减电路板空间,并降低功耗。
虽然在PSoC器件上增加可重置功能并不会增加对硅芯片的需求量,但是每一个可重置功能都需要额外的程序代码。在一些应用中,附加功能的增加将导致程序代码量大于片上闪存。此外,较大的软件栈和变量需求也可能使片上SRAM达到极限,从而增加未发现的栈溢出的可能性。截至目前,解决SRAM和闪存局限的做法是:1)限制终端产品的功能,2)将应用移植到更为昂贵、带更多SRAM和闪存的PSoC器件,或者3)手动进行代码的汇编工作,从而减少程序、栈和变量所占空间-一个非常麻烦且耗时的任务,在很大程度上会限制编程代码的可移植性。但是事实上,所有这些选择都不具备足够的吸引力。
面向PSoC混合信号阵列的HI-TECH C PRO编译器使用OCG技术,可以在编译前检查所有的程序模块,从而优化指针、寄存器和栈分配,并减少冗余代码。这款编译器还能够释放SRAM,并通过直接编译可寻址的优化功能栈(面向所有非递归和不可重入代码),达到减少对PSoC器件变址寄存器的资源争夺。由于代码量减少使执行周期变少,所以新编译器能够提高PSoC器件的性能。
与那些宣称“全局优化”,但是却仅在单独的程序模块中运行的寄存器有所不同,Omniscient Code Generation会检查全部程序中的每个模块,并对所有编程模块进行优化。PSoC器件中的C语言代码(使用OCG技术进行编译)量,仅仅是其它竞争型编译器所产生代码量的50%,从而使任意PSoC器件片上闪存的程序代码有效存储量翻番。既然执行的代码数量得到减少,那么性能自然得以提升。
SRAM的使用率更是得到了提高,因为OCG了解并且对变量和编译栈所需要的存储容量进行准确分配,甚至能够决定指针变量的范围,并在可能的情况下分配单字节指针。这样做的效果,就是编译器增加了SRAM的可用性,有的时候甚至能提高相当大的百分比。此外,通过对程序所需的最大深度静态设置栈,OCG潜在阻止了灾难性的栈溢出。
基于所有程序模块的调用关系图和指针引用图。在进行编译的准备过程中,OCG编译器会针对程序中的每个模块生成部分编译过的代码库。然后,它会针对所有这些库功能(在程序中随处进行引用)进行寻找,并建立一个“调用关系图”。一旦调用关系图完成,那些从来不被调用的功能被移除,编译器对那些被称为可重入(re-entrantly)的功能进行辨别和标注,例如来自主代码行的功能以及中断功能。
OCG编译器还能够在每个程序模块中生成任意指针的指针引用图。由于编译器知道指针指明的对象大小,所以它能够发现任意对静态分配对象的访问,从而提醒编程人员可能的无效存储访问。那些从来没有初始化的指针会被发现,并在编译过程中给予适当警告。此外,该编译器为开发人员提供了一个有价值的调试工具,能够显示所有指针和其指定目标的报告。
该款编译器还能够识别不同源文件中的变量或对象的不相符的声明,并对使用者发出警告。
通过优化变量和栈释放SRAM。传统的编译器通常会对变量所占空间做最坏打算,这样一来就导致了SRAM资源的利用不足。既然编译器知道所有变量的大小,那么它就能够根据每个变量实际需要的内存大小进行分配,根据应用的不同,释放10%甚至更多的SRAM空间。
就像许多低成本的8位可编程产品,PSoC混合信号阵列使用相同的SRAM空间储存软件功能栈和数据变量。如果为动态栈的最大深度分配的SRAM空间不足,那么栈就会溢出到数据变量空间,从而导致程序出错。
多数功能都是不可重入和非递归的,而且可以借助一个可预测的静态编译栈实现。该编译器的OCG技术检查所有的程序模块,识别所有的不可重归和非递归功能,并且利用恰如其分的内存容量来编译和优化一定大小的功能栈,从而容纳每一个功能的最大深度。既然已经确定了调用关系图,那么在不同时间内执行的功能可以针对其静态编译栈分享相同的SRAM空间。这样的特性将栈空间降低到必需的绝对极小值,从而为数据
1