DSP編程技巧之27---答疑解惑哪家強(qiáng)之(2)
答疑解惑哪家強(qiáng)?我們EEPW最強(qiáng)。。。所以接下來(lái)繼續(xù)我們的答疑解惑。
本文引用地址:http://m.butianyuan.cn/article/265108.htm8. 含有CLA加速器的CPU必備的編譯器選項(xiàng)?
除了問(wèn)答4、5、7提到的選項(xiàng)之外,CLA CPU對(duì)編譯器也有一定的要求,如表2所示。
9. “大內(nèi)存模型”和“小內(nèi)存模型”的區(qū)別是什么?
C28x一般使用大內(nèi)存模型,假設(shè)數(shù)據(jù)可以存放在存儲(chǔ)單元的任何可用空間中。小內(nèi)存模型的提出其實(shí)針對(duì)的是基于C27x模式CPU的代碼,它默認(rèn)數(shù)據(jù)是存放在低64k存儲(chǔ)空間范圍內(nèi)的,除非使用far關(guān)鍵字進(jìn)行特別指明?,F(xiàn)在的DSP器件片上存儲(chǔ)空間普遍比較大,顯然使用大內(nèi)存模型更為合理。
10. 什么是“統(tǒng)一內(nèi)存模型”?
統(tǒng)一內(nèi)存模型“--unified_memory”指在“統(tǒng)一的內(nèi)存模式”下產(chǎn)生代碼。顧名思義,就是把所有的存儲(chǔ)空間定義為一個(gè)整體,不管它是片上的SRAM、ROM、OTP還是使用XINTF接口的外部的存儲(chǔ)單元,通常把外設(shè)的寄存器也映射到數(shù)據(jù)存儲(chǔ)空間中。這樣編譯器在編譯時(shí)就可以使用PREAD/PWRITE/MAC等指令來(lái)處理大部分的內(nèi)存復(fù)制memcpy調(diào)用和結(jié)構(gòu)體的分配。
11. 實(shí)時(shí)運(yùn)行庫(kù)RTS的作用是什么?
在計(jì)算機(jī)程序設(shè)計(jì)領(lǐng)域,運(yùn)行時(shí)庫(kù)是一種被編譯器用來(lái)實(shí)現(xiàn)編程語(yǔ)言內(nèi)置函數(shù),以提供該語(yǔ)言程序運(yùn)行時(shí)(執(zhí)行)支持的一種特殊的計(jì)算機(jī)程序庫(kù)。這種庫(kù)一般包括基本的輸入輸出或是內(nèi)存管理等支持。在DSP的編程中,它們的作用是用來(lái)建立C/C++代碼運(yùn)行的環(huán)境,主要包括以下幾個(gè)方面:
1) ANSI/ISO C/C++標(biāo)準(zhǔn)庫(kù)。
2) C的輸入輸出I/O庫(kù)。
3) 為主機(jī)的操作系統(tǒng)提供底層的I/O支持。
4) DSP的啟動(dòng)程序_c_int00(可參考http://m.butianyuan.cn/article/262926.htm)。
12. RTS中函數(shù)的描述從哪里可以找到?
在問(wèn)答11中,RTS包含了四大類內(nèi)容。前面兩者因?yàn)槭菢?biāo)準(zhǔn)C/C++的內(nèi)容,并沒(méi)有在TI的文檔中給出額外的說(shuō)明;此外,C++ STL庫(kù)和它們的API的使用也沒(méi)有TI官方文檔。此時(shí)我們可以參考標(biāo)準(zhǔn)C/C++的書(shū)籍、資料、網(wǎng)頁(yè)等。如果希望最權(quán)威的參考,可以查閱TI提供的參考鏈接:
1) The Standard C++ Library: A Tutorial and Reference, Nicolai M. Josuttis, Addison-Wesley, ISBN 0-201-37926-0
2) The C++ Programming Language (Third or Special Editions), Bjarne Stroustrup, Addison-Wesley, ISBN 0-201-88954-4 or 0-201-70073-5.
3) C++ online reference at http://www.cplusplus.com/
4) C代碼的靜態(tài)檢查工具h(yuǎn)ttp://www.splint.org/
當(dāng)然,作為DSP的開(kāi)發(fā)人員,高效保質(zhì)地完成代碼工作才是最重要,上面那些書(shū)籍、鏈接,請(qǐng)慢慢研究吧。。。
14. 從哪里可以找到RTS庫(kù)文件?
通常情況下,隨CCS軟件安裝而提供的RTS庫(kù)文件都位于CCS安裝目錄中,編譯器Codegen對(duì)應(yīng)的子目錄中。例如,在新版本的CCS6.x中,C28x的編譯器位于CCS安裝目錄下面的toolscompilerc2000_6.2.5lib中(根據(jù)編譯器版本的不同,倒數(shù)第二個(gè)目錄名字會(huì)有相應(yīng)的變化)。
在老版本的CCS中,RTS庫(kù)文件被默認(rèn)安裝到操作系統(tǒng)的程序目錄中,例如C:Program FilesTexas InstrumentsC2000 Code Generation Tools 5.2.4。
對(duì)于其它一些特殊的庫(kù),例如FPU快速運(yùn)行支持庫(kù)FastRTS,則在下載安裝了FastRTS安裝包之后,位于其安裝目錄之下的lib文件夾中,例如FPUfastRTSV100librts2800_fpu32_fast_supplement.lib。如果安裝了controlSuite軟件,則可以通過(guò)它內(nèi)置的說(shuō)明或者搜索功能找到對(duì)應(yīng)的庫(kù)文件。
15. RTS庫(kù)那么多,我們應(yīng)該使用哪一個(gè)?
隨著器件類型、特性的不斷發(fā)展,現(xiàn)在在CCS安裝目錄下叫RTSxxx.lib的文件已經(jīng)非常非常多了,那么到底哪些是適合我們使用的呢?對(duì)于C28x器件,總結(jié)如表3所示。
表3 C28x DSP使用的實(shí)時(shí)運(yùn)行支持庫(kù)
16. 已經(jīng)啟用了rts2800_fpu32_eh.lib ,為什么還要用rts2800_fpu32_fast_supplement.lib?
在含有FPU的器件上,如果在不啟用--float_support=fpu32編譯器選項(xiàng)的情況下使用浮點(diǎn)數(shù)編程,那么它的運(yùn)算還是CPU來(lái)執(zhí)行的,執(zhí)行效率就和從定點(diǎn)CPU上直接使用浮點(diǎn)運(yùn)行進(jìn)行編程一樣低;啟用了--float_support=fpu32編譯器選項(xiàng)之后,浮點(diǎn)數(shù)的加法、減法、乘法等操作則有FPU來(lái)完成,執(zhí)行效率自然要高出很多。
使用rts2800_fpu32_fast_supplement.lib庫(kù)的目的,則是為了調(diào)用DSP的ROM中的數(shù)學(xué)表快速計(jì)算一些數(shù)學(xué)函數(shù),包括atan、atan2、cos、division、isqrt、sin、sincos、sqrt等。如果不使用rts2800_fpu32_fast_supplement.lib庫(kù)來(lái)完成這些數(shù)學(xué)運(yùn)算,則編譯器默認(rèn)情況下是使用標(biāo)準(zhǔn)C/C++數(shù)學(xué)庫(kù)里的函數(shù)來(lái)完成這些運(yùn)算的,效率自然不能和查找ROM中的數(shù)學(xué)表一樣迅速。
那么CCS為什么不附帶安裝FastRTS庫(kù)呢?這可能和在定點(diǎn)DSP的使用中,IQmath庫(kù)也不是附帶安裝是通用的道理吧,其它相類似的,一些信號(hào)處理函數(shù)庫(kù),例如FFT、IFFT等也不是CCS安裝的時(shí)候附帶的,需要自己去下載安裝支持程序。
c++相關(guān)文章:c++教程
評(píng)論