新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話(huà) > DSP編程技巧之2:揭開(kāi)編譯器神秘面紗之處理器選項(xiàng)

DSP編程技巧之2:揭開(kāi)編譯器神秘面紗之處理器選項(xiàng)

——
作者:paradoxfx 時(shí)間:2013-12-18 來(lái)源:電子產(chǎn)品世界 收藏

處理器選項(xiàng)

本文引用地址:http://butianyuan.cn/article/198710.htm

別名

含義

--silicon_version=28

-v28

C28x架構(gòu)的產(chǎn)生目標(biāo)文件;不選擇的話(huà)模式為C27x模式,也可以選擇為C2xLP兼容模式(例如讓C28CPU支持C24的匯編語(yǔ)句,存在較多的兼容性問(wèn)題,因?yàn)閷ふ夷J健?span lang="EN-US">CPU架構(gòu)等都發(fā)生了一定的變化,有的指令不再適用于新器件)。后兩種模式大部分網(wǎng)友都幾乎不會(huì)用到,所以我們的選項(xiàng)里面一般都會(huì)選擇-v28。更詳細(xì)的信息可以參考CPU介紹和匯編編程指南。

--large_memory_model

-ml

產(chǎn)生大內(nèi)存模式下的代碼。開(kāi)啟這個(gè)選項(xiàng)的話(huà),會(huì)強(qiáng)迫把整個(gè)地址空間當(dāng)作一塊完整的22位寬的空間(實(shí)際是分為16位寬的低地址和超過(guò)16位寬度之后的高地址空間的),從而使得尋址時(shí)使用的指針也是22位的(這個(gè)指針是針對(duì)CPU尋址來(lái)說(shuō)的,不是我們C程序里用的指針),這樣尋找空間就不必局限于216次方,即64K了。這種模式適合在C++編程的時(shí)候使用,使得編譯生成的代碼可以訪問(wèn)超過(guò)16位寬度的地址空間的存儲(chǔ)單元,這樣就沒(méi)有64K字的空間限制了。

那么為什么在在C++編程時(shí)使用呢?是因?yàn)槟壳?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/編譯器">編譯器不支持C++的關(guān)鍵字far;如果你了解C++關(guān)鍵字的話(huà),那用同樣的思路來(lái)理解這個(gè)模式就容易了。

此外,在開(kāi)啟的情況下,大內(nèi)存模式是必須開(kāi)啟的,否則編譯器會(huì)報(bào)錯(cuò)。

在新建C2000的工程,需要添加相關(guān)的庫(kù)文件的時(shí)候,如果你再看到有的庫(kù)是rts2800.lib,有的是rts2800_ml.lib,這次應(yīng)該明白改用哪個(gè)了吧。小建議是為了省事和保持兼容性,沒(méi)有別的顧慮的話(huà)就把這個(gè)選項(xiàng)打開(kāi)吧。

--unified_memory

-mt

統(tǒng)一的內(nèi)存模式下產(chǎn)生代碼。顧名思義,就是把所有的存儲(chǔ)空間定義為一個(gè)整體,這樣編譯器在編譯時(shí)就可以使用RPTPREAD指令來(lái)處理大部分的內(nèi)存復(fù)制memcpy調(diào)用和結(jié)構(gòu)體的分配(它也不用“擔(dān)心”存儲(chǔ)空間突然出個(gè)斷層,沒(méi)法連續(xù)尋找了)。例如像下面的匯編指令就可以得到更加高效的執(zhí)行:

MOVL XAR7, #Array1?? ;XAR7指向數(shù)組1

MOVL XAR2, #Array2?? ;XAR2指向數(shù)組2

RPT #(N-1) ;重復(fù)執(zhí)行下一條指令N

||PREAD *XAR2++,*XAR7 ;Array2[i]=Array1[i],i++

這樣的一段匯編代碼我們可以直接手工編寫(xiě);如果你有個(gè)for循環(huán)的C代碼的話(huà),看一下編譯生成的匯編代碼,是不是幾乎一模一樣的?

--cla_support[=cla0]

無(wú)

--cla_supportC2833x系列之后的Piccolo系列才有的特性,叫控制規(guī)律加速器,意思是把一些與控制系統(tǒng)性能息息相關(guān)的代碼放到CLA中獨(dú)立運(yùn)行,不占用CPU時(shí)間,這樣整個(gè)控制軟件的運(yùn)行速度都得到極大提高,從而保證實(shí)時(shí)性。

--float_support={fpu32|softlib|fpu64}

無(wú)

在啟用了-v28-ml的前提下才能使用;含義是啟用軟件處理(比如調(diào)用一些優(yōu)化好的庫(kù)函數(shù))、32位或者64位的協(xié)處理器進(jìn)行浮點(diǎn)運(yùn)算,從而支持相關(guān)的匯編指令。

這這個(gè)子選項(xiàng)是不能同時(shí)使用的,即使用方法為:

--float_support=fpu32

或者--float_support=fpu64等。

需要補(bǔ)充的是,這里的64位浮點(diǎn)運(yùn)算指的數(shù)據(jù)類(lèi)型是long double,而實(shí)際上28335這樣的目前只硬件支持32位的FPU運(yùn)算,64位的浮點(diǎn)運(yùn)行要經(jīng)過(guò)CPU折算再送給FPU處理的,所以不是必須的話(huà)盡量不要使用FPU64這樣的運(yùn)算。

--vcu_support[=vcu0]

無(wú)

VCUF2837xD這樣的高端芯片上具備的功能,指的是Viterbi and complex unit (VCU II) accelerators,即通過(guò)采用viterbi 復(fù)雜單元 (VCU II) 加速器執(zhí)行振動(dòng)分析來(lái)更好地預(yù)測(cè)電機(jī)故障,振動(dòng)信號(hào)的來(lái)源是加速度傳感器或者振動(dòng)傳感器等,可以使用流行的MEMS,可以貼在電機(jī)的外殼、編碼器等部位。如果需要使用這個(gè)功能的話(huà),就需要在編譯器選項(xiàng)里面打開(kāi)它。

c++相關(guān)文章:c++教程



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPU CCS DSP 編譯器

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉