位置:51电子网 » 技术资料 » 接口电路

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

发布时间:2008/5/28 0:00:00 访问次数:567

  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编译器可以实现这些功能,它对开发者

  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编译器可以实现这些功能,它对开发者

相关IC型号

热门点击

 

推荐技术资料

耳机放大器
    为了在听音乐时不影响家人,我萌生了做一台耳机放大器的想... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!