新的编译器技术有效加倍PSoC器件的存储能力编译器减少高达50%的程序代码、提高SRAM使用率、阻止栈溢出并加快执行速度

本文作者:admin       点击: 2007-10-02 00:00
前言:

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空间。这样的特性将栈空间降低到必需的绝对极小值,从而为数据存储释放了更多的SRAM空间。一个被编译过的静态栈也能够减少栈溢出的可能性,这种溢出会在动态栈扩展到SRAM中的数据变量空间时发生。

递归功能必须以一种不同的方式进行处理,包括将其分配到存储本地变量的动态栈空间,或者是管理递归呼叫使其无法覆盖现有数据。OCG编译器可以实现这些功能,它对开发者而言是完全透明的,而且不要求语言上的非标准扩展。

消除在PSoC变址寄存器处的冲突。访问PSoC器件动态栈中的数据,需要将栈指针内容(用来压入和弹出指令)转换到变址寄存器,之后利用变址寄存器来读取数据。由于PSoC器件仅仅包含一个变址寄存器,资源缺乏会导致动态栈发生冲突。此外,如果栈指针改变或者是变址寄存器被复用做其它目的,那么栈指针将不得不被保存,然后再重新复制到变址寄存器。指针复制或写入变址寄存器,这样的动作每次大约需要4-10个时钟周期,如果一个应用频繁访问动态栈,那么其所产生的程序代码较系统功能实际所需的代码量要多的多。

既然静态软件栈的编译是可直接寻址的,不需要使用栈指针或者变址寄存器,那么其程序运行所需的代码量和周期数就得到了减少。有了OCG编译器,程序中面向小型可重入或者递归功能的传统堆栈得以保存。借助这款编译器,开发人员在平均99%的情况下都能够避免使用PSoC器件的动态栈,从而减少控制动态栈所需的大量冗余代码。

优化PSoC存储器使用情况。PSoC混合阵列具有分页的SRAM架构,在任意时候,仅有256B的SRAM是可寻址的。访问其它的存储页要求重置页选择寄存器(PSR)。每一次PSR重置需要3字节的代码和12个执行周期。如果数据来自于正在使用的页面(例如一个中断程序),那么这个数据必须写入其它存储页,而且需要另行附加程序代码和更多的时钟周期。例如,Page0被自动选择用于中断程序,如果中断程序要求访问Page0以外任意页上的变量,那么PSR必须被保存、内存访问模式更改、PSR上加载其它的页地址。之后,PSR必须在中断进行之前重新存储其状态。

每一次发生这种情况,总共12B的程序代码和50个时钟周期都会添加到程序执行中。在极端情况下,变量分配欠优很容易导致代码数量以及执行周期数翻番。

OCG技术能够辨别所有被使用的变量,知道它们何时被使用以及使用时的上下文字段(context)。因此,它会将数据变量分配到SRAM存储页中,最小化需要PSR升级的数量。例如,编译器在一个SRAM页中分配来自中断程序的变量访问,使其能够在中断中始终处于可寻址状态,而不是在访问之前需要对PSR进行更新。

OCG编译算法会仔细考虑每一个变量的各种情况,加上将pointer value分配给指针的情况(无论通过功能回归、功能参数传递的直接分配,还是通过其它这阵的非直接分配),构建数据引用图,也就是指针引用图(Pointer Reference Graph)。构建完成后,指针引用图对所有对象(可能被指针引用)的设置进行辨识。这些信息用来决定每一个指针将被用来访问哪个存储区域或是存储页。来自不同模块对同一个对象的冲突性声明将被发现,之后会向用户发送一条错误信息提示。而从来没有引用的变量也将会被发现并被删除。

该款编译器还为每个指针变量定义了一组地址空间,这对PSoC而言有最佳效率,而且无需程序源进行任何特别指示。

HI-TECH实现OCG功能的编译器对所有被使用的变量、程序模块中的指针以及其使用频率进行智能化处理。它还确切的知道栈应该多大、代码生成前栈应该在哪里。它将使用最频繁的变量分配到最容易访问的RAM中,而将使用不那么频繁的数据置于RAM页中。通过减少对程序代码的需求,建立PSR,该编译器提高了代码密度,并极大提升了产品性能。

与PSoC DesignerTMv4.4无缝结合。HI-TECH带有OCG技术的编译器能够与Cypress面向PSoC混合阵列的PSoC Designer集成开发环境(IDE)无缝结合。

该编译器完整功能的45天试验版可以在HI-TECH的网站http://www.cypress.htsoft.com上免费下载。

该编译器目前提供现货,2008年3月31日前购买可享受1,195美元的优惠价,之后售价将为1,495美元。产品中包括HI-TECH软件12月的升级和技术支持(无需额外付费),以及30天的不满意退款保证。多个用户和教学性质用户可享有一定优惠。

关于PSoC系列PSoC器件是可配置型混合信号阵列,它将一个高速的8位微控制器与嵌入式设计中常见的许多外围部件集成在一起。PSoC器件提供了ASIC的优点,但却没有典型的ASIC NRE或周转时间(turn-around time)。单个PSoC器件能够集成多达100个外围部件和微控制器,从而节省设计时间,缩减板级空间和功耗,并使系统成本下降5美分至10美元之多。易用的开发工具使得设计师能够选择可配置程序库元素来提供模拟功能(例如放大器、模数转换器(ADC)、数模转换器(DAC)、滤波器和比较器),以及数字功能(例如定时器、计数器、脉宽调制器(PWM)、SPI和UART)。PSoC产品系列的模拟性能包括轨至轨输入、可编程增益放大器和分辨率高达14位的ADC,以及超低的噪声、输入漏电流和电压失调。PSoC器件还包括容量高达32KB的快闪存储器、2KB SRAM、一个带有32位累加器的8×8乘法器、电源和睡眠监控电路以及硬件I2C通信电路。
所有PsoC设备都是可动态重构的,使得设计者能够随意创建新的系统功能。在许多情况下,设计者都可在不同时间对同一芯片进行不同功能的重新设置,从而获得超过100%的硅片利用率。请登陆www.cypress.com/psoc以获取更多关于PSoC产品的详细信息,登陆www.cypress.com/psoctraing可获得免费在线培训。

关于Cypress
Cypress能够为客户提供高性能、可编程的混合信号解决方案,以实现产品的快速上市和系统的出众价值。赛普拉斯的产品包括PSoC®很合阵列、USB控制器、通用可编程时钟和内存。此外,Cypress还提供从WirelessUSB™射频片上系统到West Bridge™和EZ-USB® FX2LP控制器等多种有线和无线连接解决方案,以增强多媒体手机的连通性和性能。Cypress服务于诸多市场领域,包括消费电子、计算、数据通信、汽车、工业、太阳能等。赛普拉斯在纽约证券交易所上市,股票代码为CY。Cypress网站:www.cypress.com