Cypress與HI-TECH發(fā)布最新編譯器,加倍PSoC器件的存儲能力
Cypress半導(dǎo)體公司和HI-TECH Software日前宣布了一項新的編譯技術(shù),能夠擴展動態(tài)可配置PSoC混合信號陣列的存儲容量和性能。這款新的ANSI C編譯器,即面向PSoC混合信號陣列的HI-TECH C PRO,開拓了HI-TECH的Omniscient Code Generation(全知代碼生成,OCG)技術(shù),能夠從根本上降低PSoC的代碼量。
PSoC混合信號陣列集成了可編程的模擬和混合功能,帶有一個8位MCU內(nèi)核,高達32KB閃存和高達2KB的SRAM。能夠廣泛用于成本敏感、空間受限的消費類應(yīng)用,包括觸摸屏接口、電動機控制以及近感探測及其它。PSoC設(shè)備能夠進行動態(tài)重配,在相同硅片上執(zhí)行多個獨立的功能,因此能夠減少元器件數(shù)量、縮減電路板空間,并降低功耗。
雖然在PSoC器件上增加可重置功能并不會增加對硅芯片的需求量,但是每一個可重置功能都需要額外的程序代碼。在一些應(yīng)用中,附加功能的增加將導(dǎo)致程序代碼量大于片上閃存。此外,較大的軟件棧和變量需求也可能使片上SRAM達到極限,從而增加未發(fā)現(xiàn)的棧溢出的可能性。截至目前,解決SRAM和閃存局限的做法是:1)限制終端產(chǎn)品的功能,2)將應(yīng)用移植到更為昂貴、帶更多SRAM和閃存的PSoC器件,或者3)手動進行代碼的匯編工作,從而減少程序、棧和變量所占空間-一個非常麻煩且耗時的任務(wù),在很大程度上會限制編程代碼的可移植性。但是事實上,所有這些選擇都不具備足夠的吸引力。
面向PSoC混合信號陣列的HI-TECH C PRO編譯器使用OCG技術(shù),可以在編譯前檢查所有的程序模塊,從而優(yōu)化指針、寄存器和棧分配,并減少冗余代碼。這款編譯器還能夠釋放SRAM,并通過直接編譯可尋址的優(yōu)化功能棧(面向所有非遞歸和不可重入代碼),達到減少對PSoC器件變址寄存器的資源爭奪。由于代碼量減少使執(zhí)行周期變少,所以新編譯器能夠提高PSoC器件的性能。
與那些宣稱“全局優(yōu)化”,但是卻僅在單獨的程序模塊中運行的寄存器有所不同,Omniscient Code Generation會檢查全部程序中的每個模塊,并對所有編程模塊進行優(yōu)化。PSoC器件中的C語言代碼(使用OCG技術(shù)進行編譯)量,僅僅是其它競爭型編譯器所產(chǎn)生代碼量的50%,從而使任意PSoC器件片上閃存的程序代碼有效存儲量翻番。既然執(zhí)行的代碼數(shù)量得到減少,那么性能自然得以提升。
SRAM的使用率更是得到了提高,因為OCG了解并且對變量和編譯棧所需要的存儲容量進行準(zhǔn)確分配,甚至能夠決定指針變量的范圍,并在可能的情況下分配單字節(jié)指針。這樣做的效果,就是編譯器增加了SRAM的可用性,有的時候甚至能提高相當(dāng)大的百分比。此外,通過對程序所需的最大深度靜態(tài)設(shè)置棧,OCG潛在阻止了災(zāi)難性的棧溢出。
基于所有程序模塊的調(diào)用關(guān)系圖和指針引用圖。在進行編譯的準(zhǔn)備過程中,OCG編譯器會針對程序中的每個模塊生成部分編譯過的代碼庫。然后,它會針對所有這些庫功能(在程序中隨處進行引用)進行尋找,并建立一個“調(diào)用關(guān)系圖”。一旦調(diào)用關(guān)系圖完成,那些從來不被調(diào)用的功能被移除,編譯器對那些被稱為可重入(re-entrantly)的功能進行辨別和標(biāo)注,例如來自主代碼行的功能以及中斷功能。
OCG編譯器還能夠在每個程序模塊中生成任意指針的指針引用圖。由于編譯器知道指針指明的對象大小,所以它能夠發(fā)現(xiàn)任意對靜態(tài)分配對象的訪問,從而提醒編程人員可能的無效存儲訪問。那些從來沒有初始化的指針會被發(fā)現(xiàn),并在編譯過程中給予適當(dāng)警告。此外,該編譯器為開發(fā)人員提供了一個有價值的調(diào)試工具,能夠顯示所有指針和其指定目標(biāo)的報告。
該款編譯器還能夠識別不同源文件中的變量或?qū)ο蟮牟幌喾穆暶?,并對使用者發(fā)出警告。
通過優(yōu)化變量和棧釋放SRAM。傳統(tǒng)的編譯器通常會對變量所占空間做最壞打算,這樣一來就導(dǎo)致了SRAM資源的利用不足。既然編譯器知道所有變量的大小,那么它就能夠根據(jù)每個變量實際需要的內(nèi)存大小進行分配,根據(jù)應(yīng)用的不同,釋放10%甚至更多的SRAM空間。
就像許多低成本的8位可編程產(chǎn)品,PSoC混合信號陣列使用相同的SRAM空間儲存軟件功能棧和數(shù)據(jù)變量。如果為動態(tài)棧的最大深度分配的SRAM空間不足,那么棧就會溢出到數(shù)據(jù)變量空間,從而導(dǎo)致程序出錯。
多數(shù)功能都是不可重入和非遞歸的,而且可以借助一個可預(yù)測的靜態(tài)編譯棧實現(xiàn)。該編譯器的OCG技術(shù)檢查所有的程序模塊,識別所有的不可重歸和非遞歸功能,并且利用恰如其分的內(nèi)存容量來編譯和優(yōu)化一定大小的功能棧,從而容納每一個功能的最大深度。既然已經(jīng)確定了調(diào)用關(guān)系圖,那么在不同時間內(nèi)執(zhí)行的功能可以針對其靜態(tài)編譯棧分享相同的SRAM空間。這樣的特性將??臻g降低到必需的絕對極小值,從而為數(shù)據(jù)存儲釋放了更多的SRAM空間。一個被編譯過的靜態(tài)棧也能夠減少棧溢出的可能性,這種溢出會在動態(tài)棧擴展到SRAM中的數(shù)據(jù)變量空間時發(fā)生。
遞歸功能必須以一種不同的方式進行處理,包括將其分配到存儲本地變量的動態(tài)棧空間,或者是管理遞歸呼叫使其無法覆蓋現(xiàn)有數(shù)據(jù)。OCG編譯器可以實現(xiàn)這些功能,它對開發(fā)者而言是完全透明的,而且不要求語言上的非標(biāo)準(zhǔn)擴展。
消除在PSoC變址寄存器處的沖突。訪問PSoC器件動態(tài)棧中的數(shù)據(jù),需要將棧指針內(nèi)容(用來壓入和彈出指令)轉(zhuǎn)換到變址寄存器,之后利用變址寄存器來讀取數(shù)據(jù)。由于PSoC器件僅僅包含一個變址寄存器,資源缺乏會導(dǎo)致動態(tài)棧發(fā)生沖突。此外,如果棧指針改變或者是變址寄存器被復(fù)用做其它目的,那么棧指針將不得不被保存,然后再重新復(fù)制到變址寄存器。指針復(fù)制或?qū)懭胱冎芳拇嫫鳎@樣的動作每次大約需要4-10個時鐘周期,如果一個應(yīng)用頻繁訪問動態(tài)棧,那么其所產(chǎn)生的程序代碼較系統(tǒng)功能實際所需的代碼量要多的多。
既然靜態(tài)軟件棧的編譯是可直接尋址的,不需要使用棧指針或者變址寄存器,那么其程序運行所需的代碼量和周期數(shù)就得到了減少。有了OCG編譯器,程序中面向小型可重入或者遞歸功能的傳統(tǒng)堆棧得以保存。借助這款編譯器,開發(fā)人員在平均99%的情況下都能夠避免使用PSoC器件的動態(tài)棧,從而減少控制動態(tài)棧所需的大量冗余代碼。
優(yōu)化PSoC存儲器使用情況。PSoC混合陣列具有分頁的SRAM架構(gòu),在任意時候,僅有256B的SRAM是可尋址的。訪問其它的存儲頁要求重置頁選擇寄存器(PSR)。每一次PSR重置需要3字節(jié)的代碼和12個執(zhí)行周期。如果數(shù)據(jù)來自于正在使用的頁面(例如一個中斷程序),那么這個數(shù)據(jù)必須寫入其它存儲頁,而且需要另行附加程序代碼和更多的時鐘周期。例如,Page0被自動選擇用于中斷程序,如果中斷程序要求訪問Page0以外任意頁上的變量,那么PSR必須被保存、內(nèi)存訪問模式更改、PSR上加載其它的頁地址。之后,PSR必須在中斷進行之前重新存儲其狀態(tài)。
每一次發(fā)生這種情況,總共12B的程序代碼和50個時鐘周期都會添加到程序執(zhí)行中。在極端情況下,變量分配欠優(yōu)很容易導(dǎo)致代碼數(shù)量以及執(zhí)行周期數(shù)翻番。
OCG技術(shù)能夠辨別所有被使用的變量,知道它們何時被使用以及使用時的上下文字段(context)。因此,它會將數(shù)據(jù)變量分配到SRAM存儲頁中,最小化需要PSR升級的數(shù)量。例如,編譯器在一個SRAM頁中分配來自中斷程序的變量訪問,使其能夠在中斷中始終處于可尋址狀態(tài),而不是在訪問之前需要對PSR進行更新。
OCG編譯算法會仔細考慮每一個變量的各種情況,加上將pointer value分配給指針的情況(無論通過功能回歸、功能參數(shù)傳遞的直接分配,還是通過其它這陣的非直接分配),構(gòu)建數(shù)據(jù)引用圖,也就是指針引用圖(Pointer Reference Graph)。構(gòu)建完成后,指針引用圖對所有對象(可能被指針引用)的設(shè)置進行辨識。這些信息用來決定每一個指針將被用來訪問哪個存儲區(qū)域或是存儲頁。來自不同模塊對同一個對象的沖突性聲明將被發(fā)現(xiàn),之后會向用戶發(fā)送一條錯誤信息提示。而從來沒有引用的變量也將會被發(fā)現(xiàn)并被刪除。
該款編譯器還為每個指針變量定義了一組地址空間,這對PSoC而言有最佳效率,而且無需程序源進行任何特別指示。
HI-TECH實現(xiàn)OCG功能的編譯器對所有被使用的變量、程序模塊中的指針以及其使用頻率進行智能化處理。它還確切的知道棧應(yīng)該多大、代碼生成前棧應(yīng)該在哪里。它將使用最頻繁的變量分配到最容易訪問的RAM中,而將使用不那么頻繁的數(shù)據(jù)置于RAM頁中。通過減少對程序代碼的需求,建立PSR,該編譯器提高了代碼密度,并極大提升了產(chǎn)品性能。
與PSoC Designer v4.4無縫結(jié)合。HI-TECH帶有OCG技術(shù)的編譯器能夠與Cypress面向PSoC混合陣列的PSoC Designer集成開發(fā)環(huán)境(IDE)無縫結(jié)合。
Demo下載和延長的評估期。該編譯器完整功能的45天試驗版可以在HI-TECH的網(wǎng)站http://www.cypress.htsoft.com上免費下載。
價格與供貨信息。該編譯器目前提供現(xiàn)貨,2008年3月31日前購買可享受1,195美元的優(yōu)惠價,之后售價將為1,495美元。產(chǎn)品中包括HI-TECH軟件12月的升級和技術(shù)支持(無需額外付費),以及30天的不滿意退款保證。多個用戶和教學(xué)性質(zhì)用戶可享有一定優(yōu)惠。
評論