DSP一點知識總結

來源:互聯網
上載者:User

第1章 DSP晶片的定點運算
1. 資料的溢出:
1> 溢出分類:
上溢(overflow):
下溢(underflow)
2>溢出的結果:
unsigned char 0 255
signed char -128 127
unsigned int 0 65535
signed int -32768 32767
上溢在圓圈上按資料逆時針移動;下溢在圓圈上順時鐘移動。
例:signed int :32767+1=-32768; -32768-1=32767
unsigned char:255+1=0; 0-1=255
3>為了避免溢出的發生,一般在DSP中可以設定溢出保護功能。當發生溢出時,自動將結果設定為最大值或最小值。

2. 定點處理器對浮點數的處理:
1> 定義變數為浮點型(float,double),用C語言抹平定點處理器和浮點處理器的區別,但是程式的代碼龐大,運算速度也慢。
2> 放大若干倍表示小數。比如要表示精度為0.01的變數,放大100倍去運算,運算完成後再轉化。但是這個做法比較僵硬,如要將上面的變數重新定義成0.001精度,又需要放大 1000倍,且要重新編寫整個程式,考慮溢出等問題。
3> 定標法:Q格式:通過假定小數點位於哪一位的右側,從而確定小數的精度。
Q0:小數點在第0位的後面,即我們一般採用的方法
Q15 小數點在第15位的後面,0~14位都是小數位。
轉化公式:Q=(int)(F×pow(2,q))
F=(float)(Q×pow(2,-q))
3. Q格式的運算
1> 定點加減法:須轉換成相同的Q格式才能加減
2> 定點乘法:不同Q格式的資料相乘,相當於Q值相加
3> 定點除法:不同Q格式的資料相除,相當於Q值相減
4> 定點左移:左移相當於Q值增加
5> 定點右移:右移相當於Q減少
4. Q格式的應用格式
實際應用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇一個適當的定標格式才能更好的處理運算。一般用如下兩種方法:
1> 使用時使用適中的定標,既可以表示一定的整數複位也可以表示小數複位,如對於2812的32位系統,使用Q15格式,可表示-65536.0~65535.999969482區間內的資料。
2> 全部採用小數,這樣因為小數之間相乘永遠是小數,永遠不會溢出。取一個極限最大值(最好使用2的n次冪),轉換成x/Max的小數(如果Max是取的2的n次冪,就可以使用移位代替除法)。
5. Ti的qmath.lib庫說明:
見TI的文檔C28x IQMath Library (SPRC087a).zip的詳細說明。
TI公司給出了一個Q格式的數學庫qmath.lib
注意Q格式函數使用的時序和空間要求,盡量避重就輕。
第二章 CMD檔案的編寫
1. COFF格式
1> 一般目標檔案格式(Common Object File Format)是一種流行的二進位可執行檔格式,二進位可執行檔包括庫檔案(lib),目標檔案(obj)最終可執行檔(out)。,現今PC機上 的Windows95和NT4.0以後的作業系統的二進位檔案格式(PE)就是在COFF格式基礎上的進一步擴充。
2> COFF格式:詳細的COFF檔案格式包括段頭,可執行代碼和初始化資料,可重定位資訊,行號入口,符號表,字串表等,這些屬於編寫作業系統和編譯器人員關心範疇。而對於C只需要瞭解定義段和給段分配空間就可以了。
3> 採用COFF更有利於模組化編程,程式員可以自由決定願意把哪些代碼歸屬到哪些段,然後加以不同的處理。
2. Section目標檔案中最小單位稱為塊。一個塊就是最終在儲存空間映象中佔據連續空間的一段代碼或資料。
1> COFF目標檔案包含三個預設的塊:
.text可執行代碼
.data已初始化資料
.bss為未初始化資料保留的空間
2> 彙編器對塊的處理
未初始化塊
.bss 變數存放空間
.usect 使用者自訂的未初始化段
初始化塊
.text 彙編指令代碼
.data 常數資料(比如對變數的初始化資料)
.sect 使用者自訂的已初始化段
.asect 通.sect,多了絕對位址定位功能,一般不用
3>C語言的段
未初始化塊(data)
.bss 存放全域和靜態變數
.ebss 長調用的.bss(超過了64K地址限制)
.stack 存放C語言的棧
.sysmem 存放C語言的堆
.esysmem 長調用的.sysmem(超過了64K地址限制)
初始化塊
.text 可執行代碼和常數(program)
.switch switch語句產生的常數表格(program/低64K資料空間)
.pinit Tables for global constructors (C++)(program)
.cinit 用來存放對全域和靜態變數的初始化常數值(program)
.const 全域和靜態const變數初始化值和字串常數,(data)
.econst 長.const(可定位到任何地方)(data)
3> 自訂段(C語言)
#pragma DATA_SECTION(函數名或全域變數名,"使用者自訂在資料空間的段名");
#pragma CODE_SECTION(函數名或全域變數名,"使用者自訂在程式空間的段名");
不能在函數體內聲明。
必須在定義和使用前聲明
#pragma可以阻止對未調用的函數的最佳化
3. 串連命令檔案(CMD)
1> MEMORY指定儲存空間
MEMORY
{
PAGE 0: 
name 0 [attr] : rigin = constant, length = constant 
PAGE n: 
name n [attr] : rigin = constant, length = constant 
}
PAGE n:標示儲存空間,n<255;PAGE 0為程式儲存空間;PAGE 1為程式儲存空間
name:儲存空間名稱
attr:儲存空間屬性:唯讀R,唯寫W,可包含可執行代碼X,可以被初始化I。
orgin:用來定義儲存空間的起始地址
Lenth:用來定義儲存空間的長度
2> SECTIONS分配段
SECTIONS
{
name : [property,property,……]
}
name:輸出段的名稱
property:輸出段的屬性:
load=allocation(強制地址或儲存空間名稱)同>allocation:定義輸出段將會被裝載到哪裡。
run= allocation(強制地址或儲存空間名稱)同>allocation:定義輸出段將會在哪裡運行。
註:CMD檔案中只出現一個關鍵字load或run時,表示兩者的地址時表示兩者的地址時重合的。
PAGE = n,段位於那個儲存頁面空間。
例:ramfuncs : LOAD = FLASHD, 
RUN = RAML0, 
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

3> 直接寫編譯命令
-l rts2800_ml.lib 串連系統檔案rts2800_ml.lib
-o filename.out 最終產生的二進位檔案命名為filename.out
-m filename.map 產生對應檔filename.map
-stack 0x200 堆棧為512字

4. .const段:
由關鍵字const限定的全域變數(const限定的局部變數不產生)初始化值,和出現在運算式(做指標使用,而用來初始化字串陣列變數不產生)中的字串常數,另外數組和結構體是局部變數時,其初始值會產生.const段,而全域時不產生。
第3章 C語言環境
1.C語言軟體開發過程
軟體開發過程涉及編譯器(compiler),彙編器(assembler),連接器(linker),歸檔器(archiver),建庫器 (library-build utility),運行支援庫(run time support library),HEX轉換器(hex conversion utility),交叉引用列表器(cross reference lister),絕對列表器(absolute lister)等。其大都設定既可通過命令,也可通過ccs的project/build options設定。
1>.編譯器:對C語言原始碼進行編譯,產生組合語言原始碼。
一步編譯:cl2000 –v28 [-options] filenames [object files] [-z [link_options]]
分布編譯:文法分析: 產生file.if的中間檔案 ac2000 file.c
代碼最佳化: 產生file.opt的檔案 opt2000 file.if
代碼產生: 產生file.asm的彙編檔案 cg2000 file.opt
彙編: 產生file.obj目標檔案 asm2000 file.asm
2>.彙編器:把組合語言源檔案翻譯成機器語言目標檔案,機器語言格式為公用目標格式(COFF)。具體命令格式如下:
asm2000 Version [input file [object file [listing file]]] [options]
3>.連接器:把多個目標檔案組合成單個可執行目標模組。它一邊建立可執行模組,一邊完成重定位以及決定外部參考。連接器的輸入是可重定位的目標檔案和目標庫檔案.具體命令格式如下:
組合語言:lnk2000 [options] filename1,filename2……[filenamen]
C語言:lnk2000 {-c|-cr} filenames [options] [-o name.out] [lnk.cmd] [-l libname,lib]
註: -c 運行時自動初始設定變數
-cr 載入程式時自動初始設定變數
options: 詳見手冊。
-o name.out 產生的輸出檔案名
lnk.cmd 串連的cmd檔案名稱
-l libname.lib 串連的運行支援庫名
例:lnk2000 –c prog1 prog2 prog3 –o prog.out rts2800.lib
4>.歸檔器(Archiver)
歸檔器Archiver可以用來對文檔(Archive)或者庫(library)中的檔案進行分離和合并。這些文檔或庫可以是源檔案庫,也可以時目標檔案庫。歸檔器可以對庫進行建立,添加,刪除,替換,提取等操作,具體命令格式如下:
ar2000 [-]command [options] libname [filename0,filename1,……filenamen]
1> 此命令針對TMS320F2812而言,其他類DSP命令以及格式略有不同,可詳查TI的文檔。此命令所在目錄在/CCS_v3.1/C2000/cgtools/bin
2> command:
@ 使用CMD檔案
a (add) 向指定文檔中添加指定檔案
d (delete) 刪除指定文檔中的指定檔案
r (replace) 替換指定文檔中的指定檔案
t (table) 列出指定文檔中的檔案
x (extract) 提取指定文檔中的指定檔案
3> options:
q(quiet) 屏蔽狀態資訊
s(symbol) 列出庫中定義的全域符號(對命令a,r,d無效)
u 替換檔案時同步更新修改日期
v(verbose) 提供詳細的描敘
4> libname 指定的文檔名
5> filename 文檔中指定的檔案名稱

5>. 建庫器(library-build utility): 建立滿足你自己要求的運行支援庫.CCS中提供有rts庫檔案(/CCS_v3.1/C2000/cgtools/lib),並提供了對應的來源程式檔案 rts.src(/CCS_v3.1/C2000/cgtools/lib)。如:rts2800.lib:C/C++運行支援庫; rts2800_ml.lib C/C++大記憶體模式運行支援庫;使用者可以利用歸檔器和建庫器對rts.src中的檔案進行提取,修改等操作,並重建自己需要的庫檔案。
命令的具體格式如下:
mk2000 –v28 [options] src_arch1 [-l objlib1] src_arch1 [-l objlib1]……

6>. 運行支援庫(run time support library): 它包括C編譯器所支援的ANSI標準運行支援函數、編譯器公用程式函數、浮點運算函數和C編譯器支援的I/O函數. CCS中提供有rts庫檔案(/CCS_v3.1/C2000/cgtools/lib),並提供了對應的來源程式檔案rts.src(/CCS_v3.1 /C2000/cgtools/lib)。如:rts2800.lib:C/C++運行支援庫;rts2800_ml.lib C/C++大記憶體模式運行支援庫.庫檔案包括標準的C/C++運行支援庫函數,浮點運算程式,系統啟動程式_c_int00.

7>. HEX轉換器(hex conversion utility): 它把COFF目標檔案轉換成TI-Tagged、ASCII-hex、 Intel、 Motorola-S、或 Tektronix 等目標格式,可以把轉換好的檔案下載到EPROM編程器中.
hex2000 [-options] filename
-a ASCII-HEX
-i Intel
-t Ti-Tagged
-m Motorola-S
-x Tektronix

8>.交叉引用列表器(cross reference lister): 它用串連的目標檔案產生參照列表檔案,可顯示符號及其定義,以及符號所在的源檔案.
xref2000 [options] [input filename [output filename]]
options: -lxx 每頁顯示xx行(十進位數)
-q(quiet) 不顯示提示訊息
input filename obj檔案
output filename 產生的xrf檔案

9>.絕對列表器(absolute lister): 它輸入串連後的目標檔案,輸出.abs檔案,通過彙編.abs檔案可產生含有絕對位址的列表檔案。如果沒有絕對列表器,這些操作將需要冗長乏味的手工操作才能完成。
abs2000 [-options] input file
options: -e 改變預設的檔案尾碼名
-ea[.]asmext asm->asmtxt
-ec[.]cext c->ctxt
-eh[.]hext h->htxt
-ep[.]cppext cpp/cc/cxx ->ptxt
-fs 指定輸出檔案目錄。如:–fs C:/ABSDIR
-q 不顯示提示訊息
input file .out檔案
例如:abs2000 –ea s –ec csr –eh hsr hello.out組建檔案hello.s(hello.asm),hello.csr(hello.c),hello.hsr(hello.h).
DSP總結3-C語言環境2
1. 使用者庫的建立:
1> DOS命令:使用歸檔器ar2000命令和彙編編譯串連等命令進行手工建立。
2> CCS直接建立,在CCS中建立工程對話方塊的時候有一個可選擇建立lib檔案的選項。可直接把工程中的asm,c等檔案直接整合產生一個庫檔案(不包括CMD檔案)。
2.CCS概述
DSP晶片開發工具可分為兩大類:
代碼產生工具:
代碼調試工具:C/組合語言源碼調試器,初學者工具DSK,軟體模擬器(Simulator),評價模組EVM,軟體開發系統SWDS,模擬器XDS.

3.C編譯器的最佳化:
1>C編譯器最佳化分為2類:
C語言通用最佳化:簡化運算式,資料流最佳化,刪除公用子運算式和冗餘分配,最佳化跳轉,簡化控制流程,最佳化與迴圈有關的變數,將迴圈體內計算值不變的運算式移至迴圈體前,運行支援庫函數的行內擴充。
根據DSP晶片的特定最佳化:高效地使用寄存器,自動增量寄存器定址方式,使用塊重複,使用並行指令,使用延遲跳轉。
2>CCS的最佳化選項:

4.GEL語言的使用:
GEL(General Extension Language通用擴充語言)是一種類似於C語言的一種解釋性語言,它可以建立GEL函數,以擴充CCS用途。
GEL是C語言的一個子集,然而它不能聲明主機變數,所有的變數必須在DSP程式中定義,存在於模擬/實際目標板中,唯一不在目標板上定義的標識符是GEL函數及其參數。
GEL函數可在任何能鍵入C運算式的地方調用,既可以在任何可鍵入C運算式的對話方塊中調用,也可以在其他GEL函數中調用。但不支援遞迴。
可以將常用的GEL函數添加到CCS的GEL菜單下,此時需要使用menuitem關鍵詞在GEL菜單下建立一個新的下拉式功能表列表(一級菜單),再使用hotmenu,dialog和slider在該功能表項目中添加新的功能表項目(二級菜單)。
在CCS啟動是自動執行GEL函數。SETUP CCS時設定環境時設定了自動執行GEL函數。自動運行StartUp()函數。這樣要求每個工程建立時都載入GEL檔案。
CCS提供了一系列嵌入GEL的函數。使用這些函數,使用者可以控制模擬/實際目標板的狀態,訪問儲存空間,並在輸出視窗中顯示結果。

5.Probe Point的應用
Probe Point只是暫時中斷程式的運行,更新與之相串連的視窗,然後自動運行以後的程式。與之相串連的視窗可在Probe Point設定中設定好,然後replace。
可使用Probe Point從PC檔案中匯入資料,也可儲存資料到PC檔案中,對PC檔案的格式只能使用兩種:COFF程式檔案(.out);CCS資料檔案(.dat)。
可利用Probe Point和Break Point配合顯示圖形和動畫。顯示圖形使用View->Graph->Time/Frequency,設定好跳出的對話方塊,可看到一塊記憶體 的資料,可使用Probe Point將PC上的資料傳給目標板,然後繼續運行程式。然後可以建立斷點,使圖形視窗自動更新,使用Animate命令,使到達斷點後更新視窗後程式自 動繼續執行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.