Cypress与HI-TECH发布最新编译器,加倍PSoC器件的存储能力

最新更新时间:2007-10-06来源: 电子工程专辑关键字:代码  动态  移植  周期 手机看文章 扫描二维码
随时随地手机看文章

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

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

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


关键字:代码  动态  移植  周期 编辑:冀凯 引用地址:Cypress与HI-TECH发布最新编译器,加倍PSoC器件的存储能力

上一篇:Cypress与HI-TECH发布最新编译器,加倍PSoC器件的存储能力
下一篇:调试设计:芯片设计中必不可少之举

推荐阅读最新更新时间:2023-10-12 23:12

比例式AC电源控制器适量输出AC线路的周期
  在工业控制和过程控制领域,经常必须准确控制过程温度。可利用“开关”(Bang-Bang)法来控制多数加热元件,即在预定设置点给它们通电或断电。被加热物质的温度始终在设置点附近波动。可利用比例式功率控制来实现高得多的温度精度。借助这种方法,控制器监视温度时,按照比例改变加热器功率,来使温度尽可能接近设置点。PID(比例积分导数)控制环通常可实现这种功能。以线性比例方式改变通往加热元件的交流电,这既不容易,也不简单。   本设计借鉴了Delta-Sigma调制器概念。控制器按照Delta-Sigma调制器确定的方式把AC线路的周期发送给负载。例如,当输入控制电压是满刻度的15%时,100个AC周期中,只有15个到达负
[测试测量]
比例式AC电源控制器适量输出AC线路的<font color='red'>周期</font>
世界燃料电池汽车技术动态及未来发展
      简介: 近年来,美国、日本、欧洲发达国家领导人纷纷发表观点,支持氢能和燃料电池技术发展。2003年欧盟前任主席普罗迪宣布,目标到本世纪中叶,逐步转到一个基于可再生能源的,完全集成的氢能经济。2007年,欧洲议会 ...       近年来,美国、日本、欧洲发达国家领导人纷纷发表观点,支持氢能和燃料电池技术发展。2003年欧盟前任主席普罗迪宣布,目标到本世纪中叶,逐步转到一个基于可再生能源的,完全集成的氢能经济。2007年,欧洲议会主席发布了欧盟“关于通过地区、城市、中小企业和公民社会组织之间的合作建立欧洲绿色氢能经济和第三次工业革命的书面声明”,提出到2025年要形成不同应用领域(便携式、固定式、交通等)的氢燃料电
[汽车电子]
多频技术改进数字电源转换效率并缩短设计周期
几十年来,电源转换器拓扑结构一直以模拟技术为基础。虽然大多数转换器采用开关技术和脉宽调制(PWM),但出于功率半导体器件在处理层面上的兼容,以及成本效益的考虑,电路构成主要为模拟。不过,这种情况正在改变。在显着提高数据中心和电信系统效率的过程中,模拟技术及其电路暴露出自身的缺点。 数字电源管理和控制提供实时智能,便于系统开发人员构建电源系统自动适应运行环境的变化,并优化每种特定应用场合的效率。智能数字电源IC可以自动补偿负载和系统温度的变化,利用自适应死区时间控制、动态电压调节、频移、相数降低和电流不连续模式的切换来实现节能。 数字电源给人造成费用高的感觉一直是其被快速接受的一个障碍,不过,最新推出的器件正在迅速消除模
[电源管理]
多频技术改进数字电源转换效率并缩短设计<font color='red'>周期</font>
74HC595 for STM32 源代码【worldsing笔记】
74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。 将
[单片机]
74HC595 for STM32 源<font color='red'>代码</font>【worldsing笔记】
Wind River新版测试管理工具降低程序代码潜在风险
全球嵌入式及移动应用软件领导厂商风河(Wind River)近日发布4.0版本的测试管理工具“Wind River Test Management”。这套全自动化测试系统可用来监测、执行和管理嵌入式设备上的软件测试工作。这个功能齐全的测试管理解决方案不但可以辨识出实际成品程序代码(Production Code)中的高风险性区段,更可以将测试对象完全聚焦在软件不同版本(Build)之间的变更修改内容,以获得最优化的测试结果。 Wind River Test Management 4.0所具备的专利技术﹣动态执行码监控(Dynamic Instrumentation)技术,可充分覆盖软件所有分支(Branch)和区块(Block
[嵌入式]
proteus 数码管动态显示问题解决
本文是解决proteus 数码管动态显示问题,具体表现如下: 所使用的代码为: void display(void) { P2=table ; A1=0;A2=1;A3=0;A4=0; delay(12); // A1=0;A2=0;A3=0;A4=0; // delay(1); P2=table &0xdf ;// A1=0;A2=0;A3=1;A4=0; delay(12); // A1=0;A2=0;A3=0;A4=0; // delay(1); P2=table ; A1=0;A2=0;A3=0;A4=1; delay(12); // A1=0;A2
[单片机]
proteus 数码管<font color='red'>动态</font>显示问题解决
读写stm32的内置Flash(附代码)
最近尝试了一下对32的内置flash进行读写,众所周知,芯片的flash是用来存放代码指令和变量的,其中的数据即使掉电也不会丢失。而stm32的flash之大,对于初学者的小打小闹完全不用担心不够用的情况。 因此,在需要保存一些芯片掉电之后依旧需要保存的数据(数据量不是特别大)时,运用内置flash的空闲部分可以为我们省去一颗eeprom或外置flash的花销。 知识总结: 1.flash的写入之前需要先擦除,且擦除是直接擦除一页(2KBytes),整个流程为 (1)解锁flash(2)擦除一页或多页(3)写数据(4)锁定flash 2.flash正常写入一次是16bit 3.flash的地址从0x080000
[单片机]
读写stm32的内置Flash(附<font color='red'>代码</font>)
高集成度编程工具软件STM32代码烧录编程实战
凡用过STM32的用户应该知道,当你完成程序调试后,想对STM32芯片进行程序代码烧录编程的话可以有多种方式。若通过调试接口【JTAG/SWD】来烧写程序,一般要使用STVP或STLinkUtility工具软件来完成;若通过UART接口来烧写程序,往往要下载个基于PC 端的flash烧录工具软件STM32 Flash loader demo配合;若通过USB接口来烧写程序,往往需下载DfuSe USB 固件升级工具软件来实现。如今ST推出了新的高集成度编程工具软件STM32CubeProgrammer,以后就不用这么麻烦了,因为它同时支持上述三类编程接口,而且还兼具其它功能。 一、STM32CubeProgrammer具备如下
[单片机]
高集成度编程工具软件STM32<font color='red'>代码</font>烧录编程实战
小广播
最新半导体设计/制造文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 市场动态 半导体生产 材料技术 封装测试 工艺设备 光伏产业 平板显示 EDA与IP 电子制造 视频教程

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved