王銳
【摘 ?要】介紹了德州儀器公司(TI)Code Composer Studio V3.3(CCS V3.3)環(huán)境下軟件優(yōu)化配置的方法,在相同環(huán)境下,通過比較燒注了調(diào)試版(Debug)和發(fā)布版(Release)目標(biāo)碼的設(shè)備運行時在正確性、信號輸出和執(zhí)行速度等指標(biāo)方面的差別,提出發(fā)布版使用中的一些建議。
【關(guān)鍵詞】調(diào)試版;發(fā)布版;程序優(yōu)化;執(zhí)行速度
中圖分類號:文獻標(biāo)識碼:A
TI公司的數(shù)字信號處理器集成開發(fā)環(huán)境CCS V3.3具有生成調(diào)試版(Debug)和發(fā)布版(Release)目標(biāo)碼的功能,在多數(shù)情況下嵌入式產(chǎn)品燒注的目標(biāo)碼均為調(diào)試版,該版本目標(biāo)碼保留有調(diào)試信息且未經(jīng)過編譯器優(yōu)化,會影響程序執(zhí)行效率和存儲空間利用率。發(fā)布版可以刪除調(diào)試信息并使用不同的優(yōu)化層級來對代碼進行優(yōu)化,使軟件執(zhí)行效率和存儲空間利用率得到一定的提升。
本文從開發(fā)環(huán)境優(yōu)化工具介紹入手,一步步展開論述,引入了優(yōu)化效果判定指標(biāo),設(shè)計了多種優(yōu)化配置方案,并依據(jù)判定指標(biāo)對不同方案的優(yōu)化效果進行了測試,得到了完整的測試數(shù)據(jù),通過對數(shù)據(jù)的比較和分析,得出最優(yōu)配置方案,并給出了不同類型工程下的優(yōu)化配置建議。
1 軟件優(yōu)化工具介紹
軟件開發(fā)環(huán)境為TI公司的CCS3.3集成開發(fā)環(huán)境,該環(huán)境適用于TMS320F2812 數(shù)字信號處理器。針對該DSP的硬件初始化配置略。
軟件優(yōu)化工具為CCS 3.3 中內(nèi)嵌的C Compiler優(yōu)化器,該工具支持使用ANSI 標(biāo)準(zhǔn)的C語言編寫的軟件代碼。
C Compiler優(yōu)化器包含一個可提高代碼執(zhí)行速度和減少程序占用空間的優(yōu)化程序,該優(yōu)化程序通過使用簡化路徑、開啟軟件流水線、調(diào)整聲明和表達式位置和將變量分配進寄存器等的操作來實現(xiàn)對代碼的優(yōu)化。
1.1 編譯流程
編譯過程分為三步:
a)分析器對代碼進行分析,完成對源文件的預(yù)處理和語法檢查,生成編譯器內(nèi)部識別的.if后綴的文件;
b)優(yōu)化器作為一個可選的路徑運行在解析器和代碼生成器之間,優(yōu)化器的輸入為.if文件,當(dāng)啟用優(yōu)化器并完成優(yōu)化配置后,優(yōu)化器會對.if文件進行優(yōu)化并生成與.if文件格式相同但更高效的的文件,稱為.opt文件;
c)代碼生成器將輸入的.if文件或.opt文件轉(zhuǎn)化為匯編語言源文件(.asm)。
1.2 優(yōu)化選項介紹
對于TEST.pjt工程,未使用嵌入式實時操作系統(tǒng)RTS/BIOS,使用的編程語言僅為C語言,因此影響程序優(yōu)化的選項為Basic選項,其它后續(xù)選項設(shè)置為默認值即可。Basic選項詳細內(nèi)容見表1。
2 示例工程介紹
作為示例工程的TEST.pjt,為嵌入式軟件,燒注于TI公司的TMS320F2812型數(shù)字信號處理器(DSP)硬件平臺。軟件主要實現(xiàn)大氣壓力采集及大氣參數(shù)解算。
3 優(yōu)化效果判定指標(biāo)
在工程實際應(yīng)用中,設(shè)備功能的正確實現(xiàn)是根本,然后再兼顧程序運行效率和空間占有率等指標(biāo),做到“正確優(yōu)先,兼顧效率”。
為了對優(yōu)化的效果作出合理判定,在程序運行正確性、運行時間和生成的目標(biāo)文件大小等方面進行分析,確定了TEST.pjt工程中以下4個方面的指標(biāo)作為優(yōu)化效果判定依據(jù)。
3.1 壓力數(shù)據(jù)解算正確性及壓力有效性
3.1.1壓力數(shù)據(jù)解算正確性
壓力數(shù)據(jù)的解算是具有代表性的程序運行過程,它包含了對硬件及外設(shè)的操作、邏輯和數(shù)值運算等方面內(nèi)容,可以作為軟件執(zhí)行正確性的判定標(biāo)準(zhǔn)。
3.1.2壓力有效性
壓力有效性的判定原理是通過對與壓力數(shù)據(jù)解算有關(guān)數(shù)據(jù)的判斷,以確定計算出的壓力數(shù)據(jù)是否有效可用。可作為壓力數(shù)據(jù)解算正確性判定的有效補充。
3.2 延時函數(shù)耗時
延時函數(shù)在工程中起到延時的作用,對延時函數(shù)耗時的測量可以直觀看出在不同優(yōu)化環(huán)境下單位行數(shù)的代碼的執(zhí)行速度。
3.3 定時中斷服務(wù)函數(shù)耗時
定時中斷服務(wù)程序?qū)崿F(xiàn)產(chǎn)品的主要功能,通過對不同優(yōu)化配置項下該程序運行時間的比較,可反映出軟件執(zhí)行速度的差異。
3.4 可執(zhí)行目標(biāo)文件大小
可執(zhí)行目標(biāo)文件是指燒寫進硬件平臺的嵌入式軟件最終格式,其大小可體現(xiàn)出在空間上的優(yōu)化的差異。
4 優(yōu)化配置方案介紹及驗證
根據(jù)工作中不同情況下軟件工作的特點,確立了兩種優(yōu)化配置方案,并依據(jù)第3章的判定指標(biāo)對不同方案進行測試和分析,兩種方案如下:
a)不改變軟件,配置優(yōu)化器;
b)調(diào)整軟件結(jié)構(gòu),配置優(yōu)化器。
4.1 不改變軟件,配置優(yōu)化器
4.1.1配置原則
不對工程中代碼做出調(diào)整,在項目級對編譯器進行優(yōu)化配置。
4.1.2優(yōu)化效果判定及比較
選取三種優(yōu)化配置方法進行比較分析,三種優(yōu)化配置方法為:
a)禁止使用調(diào)試信息且未使能優(yōu)化(NoDebug+None);
b)禁止使用調(diào)試信息且使能了寄存器級優(yōu)化(NoDebug+o0);
c)禁止使用調(diào)試信息且使能了本地級優(yōu)化(NoDebug+o1)。
將已通過功能測試且工作正常的配置方法作為參照組。參照組的配置方法為使用調(diào)試信息且未使能優(yōu)化(Debug+None)。
依據(jù)優(yōu)化判定指標(biāo),對上述所列每種優(yōu)化配置方法進行多次測量并取平均值后得到測試結(jié)果,見表2。
4.1.3小結(jié)
在保證程序正確運行的前提下,本優(yōu)化配置方案至多可實現(xiàn)寄存器級的優(yōu)化。優(yōu)化后程序的運行效率提高,生成的可執(zhí)行目標(biāo)文件所占空間減小。
因方法二中延時函數(shù)耗時減少較多,會造成延時時長少于設(shè)計值,在不對程序作出調(diào)整的前提下,與延時相關(guān)的數(shù)據(jù)可能會出現(xiàn)異常。因此,確定方法一為本方案最優(yōu)配置方法。
4.2 調(diào)整軟件結(jié)構(gòu),配置優(yōu)化器
4.2.1軟件結(jié)構(gòu)調(diào)整原則
對軟件工程的結(jié)構(gòu)進行調(diào)整,調(diào)整依據(jù)以下原則進行。
a)對工程中的函數(shù)按照功能進行劃分,形成不同的功能模塊文件,力求做到工程結(jié)構(gòu)合理,層次清晰;
b)隨著優(yōu)化層級的加深,工程中存在對硬件操作的函數(shù)、對外設(shè)操作的函數(shù)、中斷函數(shù)以及包含內(nèi)聯(lián)匯編的函數(shù)在運行時會出現(xiàn)代碼執(zhí)行速度與硬件不匹配的錯誤。為了避免此類錯誤發(fā)生,將上述類型函數(shù)與工程中其它函數(shù)分離開來,以便后續(xù)單獨對其實施優(yōu)化配置。
4.2.2軟件結(jié)構(gòu)調(diào)整及優(yōu)化器配置
TEST.pjt工程的源文件(僅含C、匯編和CMD文件)結(jié)構(gòu)樹如圖1所示。
依據(jù)4.3.1節(jié)要求對TEST工程進行結(jié)構(gòu)調(diào)整,將原工程中的TEST.c文件按照功能分解為多個C文件,在TEST.c文件中僅保留4.3.1節(jié)b)條所述函數(shù),調(diào)整后的工程源文件結(jié)構(gòu)樹如圖2所示。
工程結(jié)構(gòu)調(diào)整完成后,對工程中每個源文件進行單獨優(yōu)化配置成為可能。
除TEST.c外的其它c文件主要用于數(shù)據(jù)解算和邏輯判斷,不涉及對硬件的操作、內(nèi)聯(lián)匯編及中斷,可將此類C文件的優(yōu)化等級直接配置為文件級(-o3),對TEST.c文件,將該文件配置為不產(chǎn)生調(diào)試信息模式(NoDebug),具體優(yōu)化器配置見4.3.3節(jié)。
4.2.3優(yōu)化效果判定及比較
選取四種優(yōu)化配置方法進行比較分析,具體方法及配置如下:
a)TEST.C未使能優(yōu)化(None),剩余C文件使能文件級優(yōu)化(o3);
b)TEST.C使能寄存器級優(yōu)化(o0),剩余C文件使能文件級優(yōu)化(o3);
c)TEST.C使能本地級優(yōu)化(o1),剩余C文件使能文件級優(yōu)化(o3)。
將所有文件配置為使用調(diào)試信息且未使能優(yōu)化(Debug+None)作為參照組,參照組已通過功能測試且工作正常。
測試結(jié)果見表4。
4.2.4小結(jié)
本方案雖然可以保證方法三的正確性,但由于延時函數(shù)耗時測試中方法二和方法三表現(xiàn)異常(優(yōu)化層級加深延時函數(shù)耗時反而變長),因此,確定方法一為本方案最優(yōu)配置方法。
5 優(yōu)化配置總結(jié)
通過第4章的測試及分析得出了每種優(yōu)化配置方案下的最優(yōu)配置方法,為了在最優(yōu)配置方法之間進行比較,需要對測試項設(shè)置權(quán)重,通過加權(quán)計算出最優(yōu)配置方法,各測試項目的權(quán)重設(shè)置如下:
a)各方法均通過了3.1節(jié)測試,不對該項測試設(shè)置權(quán)重;
b)延時函數(shù)耗時除了在方案一方法一中增大外,在剩下兩種方法中均有減小,說明優(yōu)化會加快代碼執(zhí)行速度,該項權(quán)重應(yīng)適當(dāng)分配,分配為0.20;
c)各方法下定時中斷服務(wù)程序耗時均有不同程度減少,軟件的主要功能在定時中斷服務(wù)程序中實現(xiàn),定時中斷服務(wù)程序耗時長短可以直觀反映出程序運行效率的優(yōu)劣,權(quán)重值應(yīng)較大,分配為0.55;
d)各方法下生成的目標(biāo)文件大小均有較大程度減小,體現(xiàn)出優(yōu)化在空間上的作用明顯,該項的權(quán)重應(yīng)給予適當(dāng)分配,分配為0.25。
將兩種最優(yōu)配置方法的測試結(jié)果列表,依據(jù)權(quán)重計算出加權(quán)平均值,形成配置方法對比表,詳見表5。
通過表5可以得出如下結(jié)論:
方案二方法一的加權(quán)平均值最高,特別是定時終端服務(wù)程序耗時一項,較參照組減少了9.13%,為最優(yōu)配置方法,但其對原有代碼結(jié)構(gòu)改動較大,適用于新研項目。
方案一方法一的加權(quán)平均值最低,優(yōu)化效果雖然不及之前兩種方法,但該方法不修改代碼,適用于產(chǎn)品已定型或已完成軟件定型測評的項目。
參考文獻:
[1]王忠勇.陳恩慶.TMS320F2812 DSP原理與應(yīng)用技術(shù).北京,電子工業(yè)出版社,2012.06
[2]Texas Instruments Incorporated.TMS320C2x/C2xx/C5xOptimizing C Compiler Users guide,Texas,1999.8
[3]Texas Instruments Incorporated.TMS320C281x DSP System Control and Interruptes Reference Guide,Texas,2006.10
[4]顧衛(wèi)鋼.手把手教你學(xué)DSP——基于TMS320X281x.北京,北京航空航天大學(xué)出版社,2011.4
(作者單位:太原航空儀表有限公司)