DSP_如何構(gòu)建一個完整的工程幻燈片_第1頁
DSP_如何構(gòu)建一個完整的工程幻燈片_第2頁
DSP_如何構(gòu)建一個完整的工程幻燈片_第3頁
DSP_如何構(gòu)建一個完整的工程幻燈片_第4頁
DSP_如何構(gòu)建一個完整的工程幻燈片_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第4章 如何構(gòu)建一個完整的工程,1,目錄,1、一個完整的工程有哪些文件構(gòu)成及其作用 2、怎樣創(chuàng)建一個新的DSP工程 3、通用擴展語言GEL,2,4.1 DSP開發(fā)環(huán)境、硬件平臺,DSP開發(fā)通常需要軟件開發(fā)環(huán)境和硬件平臺。 軟件開發(fā)環(huán)境:CCS(CodeComposerStudio),是TI公司為方便開發(fā)人員而設計的軟件環(huán)境。 硬件平臺:由仿真器和目標板組成。仿真器的作用是將目標板和PC機連起來,使得您可以在CCS里對目標板上的DSP進行編程,燒寫和調(diào)試等工作,而目標板是指具有DSP芯片,上電后能保證DSP獨立運行電路板,,3,一個完整的工程由哪些文件構(gòu)成,打開CCS3.3軟件前的準備工作 1.

2、要確定訪問的文件中不含中文字符,因為CCS3.3是英文字符的軟件; 2.將TMS320F2812例程文件夾中的Gpio文件夾復制到CCS3.3安裝路徑下MyProjects文件夾里,4,打開CCS軟件后,打開工程的方式有以下兩種:一種是點擊菜單欄的ProjectOpen,另一種方法是左側(cè)Files窗口內(nèi),點擊“Projects”然后右鍵,點擊“OpenProject”。,5,打開gpio工程之后,gpio.pjt工程會顯示在左側(cè)Files窗口內(nèi)。 點擊gpio.pjt左邊的加號,工程內(nèi)部的文件就展現(xiàn)在我們面前了,下面我們來分析一下構(gòu)成該工程的文件。首先我們看到的是Include文件夾下面有很多

3、后綴是.h的文件,這就是2812的頭文件了,頭文件的作用是定義了2812內(nèi)部寄存器的數(shù)據(jù)結(jié)構(gòu)。頭文件一般情況下不需要修改,如果你需要定義一些在整個工程內(nèi)都具有作用域的全局變量的時候,可以在頭文件中定義這些變量,具體的方法我們以后在例程或項目實踐中應該會有介紹。,6,然后是libraries下面擴展名為.lib的庫文件,它是C語言系統(tǒng)的庫文件。,7,庫文件下面是source文件夾,里面的文件都是以.c為擴展名的,顧名思義,就是源文件,也就是我們開發(fā)時編寫的軟件代碼都是保存在這些文件中的。,8,最后是以.CMD為擴展名的文件,這個文件的作用是用來分配存儲空間的。由于DSP編譯器的編譯結(jié)果是未定位的

4、,DSP也沒有操作系統(tǒng)來定位執(zhí)行代碼,DSP系統(tǒng)的配置需求也不盡相同,因此我們根據(jù)實際的需求,自己定義代碼的存儲位置。打個通俗的比喻,就是我們有一個倉庫,現(xiàn)在需要把貨物存放到倉庫里面去,為了便于日后取用貨物,我們將貨物分門別類,然后把它們存放到指定的位置去。把哪些貨物放到哪個位置的規(guī)則,就是我們的CMD文件的內(nèi)容。 CMD文件又分成兩種。一種是分配RAM空間的,用來將程序load到RAM內(nèi)進行調(diào)試,因為我們大部分時間都是在調(diào)試程序,所以多用這類CMD,gpio工程中的sram.cmd就是用于分配RAM空間的,另一種是分配FLASH空間的,當程序調(diào)試完畢后,需要將其燒寫到FLASH內(nèi)部進行固化,

5、這個時侯我們就需要使用這類CMD文件了。,9,總結(jié),1、頭文件:以.h為后綴的文件,主要定義了芯片內(nèi)部寄存器結(jié)構(gòu)、中斷服務程序等內(nèi)容。 2、庫文件:以.lib為后綴的文件,包含了寄存器的地址和對應標示符的定義,還包含標準C/C+運行支持的庫函數(shù)。 3、源文件:所編寫的代碼都寫在各個源文件中;包含了所有要實現(xiàn)功能的代碼,是工程的核心。 4、CMD文件:分配RAM空間,用來將下載到RAM中的程序進行調(diào)試,是因為DSP編譯器編譯結(jié)果是未定位的,DSP也沒有相應系統(tǒng)來執(zhí)行代碼,DSP系統(tǒng)的配置需求也不盡相同,因此需要定義代碼的存儲位置。,10,4.2 怎樣創(chuàng)建一個新的DSP工程,1.打開CCS,點擊菜

6、單欄里的Projects,點擊New,會跳出新工程設置的對話框,如下圖所示。,11,2、在Projects欄內(nèi)我們填寫工程的名字:hellodsp。檢查Location,如果您都是按照默認路徑來的,那沒有問題,如果不是默認路徑,您得手工指定一下文件路徑,確認沒有問題后點擊Finish。我們發(fā)現(xiàn)在myprojects文件夾下多了hellodsp文件夾,hellodsp文件夾下生成了hellodsp.pjt文件,而且在CCS左側(cè)的Files欄內(nèi),出現(xiàn)了我們剛剛創(chuàng)建的hellodsp.pjt。,12,3.根據(jù)前面一個完整工程的組成情況的分析,我們首先來準備頭文件。由于頭文件多數(shù)情況下是不需改動的,也

7、就是說大家用的頭文件都是一樣的,因為是定義2812的內(nèi)部資源,所以可以將newproject文件夾內(nèi)的頭文件全部復制到hellodsp文件夾。 4.將newproject文件夾內(nèi)的.lib文件和.cmd文件同樣復制到hellodsp文件夾。 5.下面就剩下源文件了。 我們先來分析一下newproject文件夾下各個源文件的內(nèi)容,以便于我們更好的理解和采用這種文件結(jié)構(gòu)。,13,F2812常用的源文件,14,通過上面的分析我們可以看到幾個文件非常重要,DSP28_DefaultIsr.C, DSP28_GlobalVariableDefs.C, DSP28_PieCtrl.C,DSP28_PieV

8、ect.C, DSP28_SysCtrl.C, 把這些未編輯過的文件復制過來。其他的外設相關的文件,這個工程中涉及到哪個外設,就把這個外設相關的源文件復制過來,一起加入工程。 接下來就是往工程內(nèi)添加文件了。首先我們來添加庫文件。點擊“hellodsp.pjt”,右鍵,點擊“AddFilestoProject”,跳出了添加文件的對話框,15,在篩選框欄內(nèi)選擇“ObjectandLibraryFiles”,就會看到RTS2800N.lib,點擊并打開,便將庫文件添加到工程中來了。,16,用同樣的方法,來添加sources文件夾下的源文件和CMD文件。只是添加源文件時,篩選框的條件是“C+Sourc

9、eFile(*.cpp;*.cc;*.cxx)”添加CMD文件時,篩選框的條件應當選擇”LinkerCommandFile(*.cmd;*.lcf)”。 創(chuàng)建main函數(shù):點擊菜單欄中的File,”New”,”Source File”,在編輯區(qū)域內(nèi)出現(xiàn)了一個新的Untitled1文件,17,點擊“File”,“Save”,會出現(xiàn)保存文件的對話框。文件名填寫“hellodsp”,關鍵要注意的是保存類型,因為我們現(xiàn)在要建立的是源文件,所以選擇“C/C+ Source Flies(*.c*)”,點擊保存。,18,這時,我們看到原來的“Untitled1”變成了“hellodsp”了。我們在hello

10、dsp文件內(nèi)輸入以下內(nèi)容:,然后點擊保存,并關閉hellodsp.c文件。 再用我們剛才添加文件的方法將hellodsp.c添加到工程中來 。,19,點擊工具欄上的“Rebuild All”,對hellodsp.pjt進行編譯:,編譯結(jié)果如圖所示,出現(xiàn)了一個warning:,根據(jù)warning的提示是用默認的1024bytes來創(chuàng)建.stack section,就是堆棧段。點擊菜單欄的”Project”,”build options”,彈出編譯選項的對話框。選擇“Linker”標簽,在Stack Size(-stack)欄填寫“800”,點擊確定。,20,重新編譯:,21,4.3 通用擴展語言

11、GEL,GEL是General Extended Language的縮寫,即通用擴展語言,是一種類似于C的解釋性語言。用戶可以通過在文件中使用GEL語言來創(chuàng)建函數(shù),從而擴展CCS的功能。通過GEL,可以訪問目標板的存儲器,并為CCS的GEL菜單添加選項。,22,4.3.1 GEL語法,GEL語法支持的語句類型,GEL是C語言的一個子集,23,GEL函數(shù)的定義,GEL函數(shù)定義如下,斜體字表示變量: funcName(parameter1 ,parameter2 , parameter n) statements funcName GEL函數(shù)名 parameters 有效的GEL參數(shù) statem

12、ents 有效的GEL語句,注:GEL函數(shù)定義在文本文件中,其擴展名是.gel。一個GEL文件可以包含多個GEL函數(shù)的定義,但是一個GEL函數(shù)定義不能嵌套在另一個GEL函數(shù)的定義中。,24,例4-1 定義平方函數(shù),square(a) return a*a; ,square(1.5)=2.25; square(3)=9。,在GEL函數(shù)square中,并沒有指定返回值的類型,也沒有說明參數(shù)a的類型,這是GEL語言和C語言的區(qū)別,25,例4-2 定義初始化對話框函數(shù),dialog Init(filename “File to be Loaded”, CPUname “CPU Name”,initVa

13、lue “Initialization Value”) GEL_Load(filename, CPUname); a=initValue; ,首先,dialog不是指返回值的類型,這個函數(shù)里也沒有返回值。dialog是關鍵字,意思是對話框,也就是說當調(diào)用函數(shù)Init的時候,會彈出一個對話框,該對話框會有3個項,分別是函數(shù)的3個參數(shù):filename、CPU Name和initValue。每個參數(shù)后面緊跟的字符串是對參數(shù)的描述。,26,4.3.2 GEL函數(shù)的參數(shù),GEL參數(shù)可以是以下任意一種: 一個實際的/仿真的DSP目標板符號值。 一個數(shù)字常量,如果傳遞的是表達式或者常數(shù)值。 一個字符串常量

14、。,27,例4-3 分析GEL函數(shù)參數(shù),Initialize(a,filename,b) targVar=b; a=0; GEL_Load(filename); return b*b; 下面是對函數(shù)Initialize的正確調(diào)用: Initialize(targetSymbol, “C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”, 28*4+2.52)。,當執(zhí)行函數(shù)Initialize時,參數(shù)a被定義為DSP的標示符targetSymbol,參數(shù)filename初始化為字符串常量“C:CCStudio_v3.3MyProjectsgpioDebuggpi

15、o.out”,參數(shù)b通過計算成為常數(shù)114.52。這些值在函數(shù)中對應參數(shù)的地方使用。,28,GEL函數(shù)的調(diào)用,通??梢栽诳梢暂斎隒表達式的任何地方調(diào)用一個GEL函數(shù);可以從任何能接受有效C表達式的對話框中調(diào)用一個GEL函數(shù);還可以在一個GEL函數(shù)中調(diào)用另一個GEL函數(shù)。,29,4.3.3 GEL語句,返回語句 If-else語句 While語句 注釋語句 預處理語句,30,GEL返回語句,GEL在一個函數(shù)里支持標準C的返回語句, 其一般形式為: return expression;,一個返回語句并不是需要返回一個值,一個沒有表達式的返回語句將控制返回到調(diào)用處,但并不返回有用的值。這和當函數(shù)執(zhí)行

16、到終點時仍沒有遇到返回語句的結(jié)果是一樣的,與標準C語言不同的是,GEL函數(shù)的定義并不需要指定返回值的類型,返回值的類型在程序運行時決定。,31,GEL if-else語句,GEL支持標準C的if-else語句。通用格式為: if(expression) statement1 else statement2,執(zhí)行if-else語句時,兩個語句中只有一個才會執(zhí)行。 statement1和statement2可以是一個單語句,也可以是用括號括起來的多個語句。,32,GEL while語句,GEL的while語句類似于標準C的while語句, 但是GEL不支持標準C的continue和break語句。

17、 通用格式為: while(expression) statement,執(zhí)行while語句時,先計算表達式expression的值。如果expression的值為真,語句執(zhí)行,表達式被從新計算。這里的statement可以是單語句,也可以是括號里的多個語句。,33,GEL注釋,GEL支持標準C語言的注釋。 GEL的注釋,限用字符/*和*/,可以跨越若干行。,34,GEL預處理語句,GEL支持標準C的#define預處理關鍵字, 這也是唯一可用的預處理關鍵字。 下面的語句,使預處理器用給定的字符序列取代標識符, 其中字符序列前后的空格都不要: #define identifier token-s

18、equence 下面的語句(第一個標識符和括號之間沒有空格) 是一個宏定義,其參數(shù)是標識符列表: #define identifier(identifier-list) token-sequence,35,4.4 關鍵字hotmenu,使用關鍵字hotmenu,將一個GEL函數(shù)添加到GEL菜單 里,則該函數(shù)一旦被選中就立即執(zhí)行,其語法如下: hotmenu funcname statements ,36,37,關鍵字dialog,使用關鍵字dialog,向GEL菜單添加GEL函數(shù), 并為參數(shù)輸入創(chuàng)建一個對話框。從GEL菜單選擇該函數(shù)時, 會出現(xiàn)一個對話窗口,并提示輸入?yún)?shù)。 函數(shù)定義時緊跟在參數(shù)后面的字符串用來在對話窗口里描述參數(shù)。其語法如下: dialog funcName(paramName1 “param1 definition”, paramName2 “param2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論