ccs編譯器優化for
① 對DSP而言,CCS用C語言編程和匯編編程,二者的效率相差多少
我用的是28XX系列的,不知道經驗對你有沒有用,因為不同系列的晶元多少有些差別。
TI提供的庫已經相當可以了,兼顧易用與效率。我當時做過這樣的測試
1. 用IQMATH實現
2. 直接C語言實現
3. C語言優化實現
4. 原生匯編實現
IQMATH的運行周期在1000左右,比方案3快幾十個周期,比方案4慢幾個周期,方案2是10000多個周期。
另外,因為只是單獨測的演算法,匯編之所以快是快在寄存器的使用上,操作數可以直接入寄存器,但是考慮到程序其他部分是用C語言編寫的話,把操作棧的時間也加上,並不比方案1快。畢竟我對TI的匯編吃的也不透。
在編寫上,無疑是方案1提供了最接近C語言風格的實現,幾乎不用考慮ISA方面的問題。
另外對於執行效率,我覺得主要考慮三點:
1.分支的使用
CCS對C語言的優化我沒做過太多比對。其實單從反匯編的結果看,我接觸過的嵌入式開發環境的編譯器都能做出很好的優化。但是幾乎每個編譯器都會在邏輯的優化上有欠缺——它只能對一些顯而易見的判斷條件進行優化,而在寫程序的過程中,我們經常出於易讀性的考慮,或者穩定性的考慮,或者其他的考慮加入幾乎不會發生的分支,這樣的分支判斷會消耗一定比率的代碼段執行效率,視乎代碼段內有用功能的長度而定,越長這個比率越小,越短這個比率越高。
2.一般操作,就是各種賦值操作
在一般的操作上,編譯器的優化已經很令人滿意了,基本上可以作為編寫匯編的範本。我覺得所謂效率能達到90%就是針對這個部分說的。
3.特殊操作,比如對整塊內存的操作,或者是浮點運算上。
在一些特殊的操作上,就要看是否有現成的庫,或者看硬體是否支持。比如對整塊內存操作就別用循環一個位元組一個位元組的搬了。
以上三點都能考慮到的話,相信執行效率方面已經沒有太大的提升空間了。
另外如果你的代碼發生在初始化部分,也就是只在系統運行開始的時候運行一次,那麼優化不優化其實沒有太大的必要,除非你對系統初始化的時間有嚴格的要求。但是如果你的代碼是作為任務要被反復運行的,那就有優化的必要了。
在CCS里有代碼消耗時鍾周期的統計,如果你覺得某段代碼效率低下的話,可以先分段進行消耗時鍾周期的計算,這樣優化比較有針對性。
② 同樣的一段程序,CCS 和 IAR 編譯運行的結果不同
優化舉個簡單例子:int
i;i=1;i=2;i=3;i=4;i=5;i=6;i=7;i=8;i=9;i=10;這段代碼會被直接優化成
i=10;連續10次給i賦值,只有最後一次才有意義。前面的賦值沒有意義,會被直接優化掉。如果後面i也沒有被使用,則變數i本身沒有意義,直接優化掉。最後編譯出來的代碼就是空。進一步,把上面的賦值換成循環int
i;for(i=1;i<10;i++);這段代碼也會被優化成i=10;循環相當於連續給i賦值9次,循環裡面i的值是多少,是沒有意義的,最後循環退出時的i值才有意義,相當於最後一次的賦值i=10;如果後面的程序沒有用到i,則變數i本身沒有意義,直接優化掉。最後編譯出來的代碼就是空。謹記:空循環是沒有意義的,有點優化能力的編譯器,都會將空循完全環優化掉。如果需要延時,請加上volatile,或者調用編譯器的延時函數,或者用編譯參數禁止優化,或者使用內嵌匯編。總之,不要使用沒有volatile的空循環帶實現延時,這是不規范的。
③ 如何使用ccs c編譯器中的優化選項
CCS3.3既支持c程序設計又支持C++,當你的源程序的文件後綴採用.c時,CCS用c編譯器編譯程序,當使用.cpp後綴時,用C++編譯器。
④ CCS PIC編譯器的使用和安裝方法
c程序設計又支持c++,當你的源程序的文件後綴採用.c時,ccs用c編譯器編譯
⑤ ccs4.1首次使用 編譯時出現這個錯誤怎麼解決
這個地方其實應該是「code-start」而不是「code-strat」,應該是原工程筆誤,這是用來設定代碼的入口(entry-point)的 DSP2833x_CodeStartBranch.asm 文件中定義的符號是「code-start」,那麼告訴CCS編譯器的也應該是這個符號。而如何告訴CCS編譯器,在property-->build-->C2000-->advanced options-->symbol management中可以找到entry-point的定義,將code-strat改為code-start即可。
⑥ 【求助】關於CCS編譯器的問題
你運行的程序出錯。因為你本機安裝了VS所以有這個調試代碼的提示。
如果你不安裝VS等開發或調試功能。就能看到運行程序的錯誤提示了。
⑦ dsp程序匯編優化
指令之間能否並行主要是依據內核資源和指令間是否存在相互依賴的關系來決定的。你把你的C源碼經過CCS的C編譯器後生成的匯編語言(ASM文件)來改是現實的,因為已經進過了編譯器的匯編優化,基本上就沒有可讀性,而且也不能作為源文件來輸入的。要想做匯編優化,第一步可以考慮從寫線性匯編指令開始,因為相對於匯編語言而言,對編碼者的要求低不少。積累到一定的基礎了,再可以考慮使用匯編語言。
⑧ ccsv5 導入ccsv6建的工程提示編譯器版本低 請問怎麼更新
低版本是無法兼容高版本的文件的,只能升級cssv6,下載後,然後在項目右鍵 properties中選到general,選complier version 旁邊的more就可以選你安裝。
利用CCSv5導入之前版本工程(*.pjt)的方法
其實很簡單,使用File-Import
只不過是不要選擇(General)Existing Projects into Workspace,那裡會提示「Some projects cannot be imported because they already exist in the workspace」,而是要在Import的時候選擇(Code Composer Studio)Legacy CCSv3.3 Projects
進入後直接選擇相應的*.pjt文件
之後沒有特殊要求就一路Next直到Finish就好啦。導入後Build應該沒問題。
至於Debug的需求,還是需要新建Target Configuration File,按需要選擇模擬器,就可以了。