如何構(gòu)建一個(gè)完整的工程_第1頁(yè)
如何構(gòu)建一個(gè)完整的工程_第2頁(yè)
如何構(gòu)建一個(gè)完整的工程_第3頁(yè)
如何構(gòu)建一個(gè)完整的工程_第4頁(yè)
如何構(gòu)建一個(gè)完整的工程_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第4 4章章 如何構(gòu)建一個(gè)完整的工程如何構(gòu)建一個(gè)完整的工程DSP原理及應(yīng)用打開已有的工程打開已有的工程4.1 一個(gè)完整的工程由哪些文件構(gòu)成頭文件頭文件 .h文件,來(lái)自于文件,來(lái)自于Include文件夾。是文件夾。是TMS320F2812工程的頭文件,工程的頭文件,頭文件內(nèi)定義頭文件內(nèi)定義了內(nèi)部寄存器的數(shù)據(jù)結(jié)構(gòu)了內(nèi)部寄存器的數(shù)據(jù)結(jié)構(gòu)。一般不需要修改。一般不需要修改。如果需要定義在整個(gè)工程內(nèi)都具有作用域的全如果需要定義在整個(gè)工程內(nèi)都具有作用域的全局變量時(shí),可以將這些變量定義在頭文件里。局變量時(shí),可以將這些變量定義在頭文件里。庫(kù)文件庫(kù)文件 .lib文件,來(lái)自于文件,來(lái)自于Libraries文件夾。

2、文件夾。源文件源文件 .c文件,來(lái)自于文件,來(lái)自于Source文件夾。工程文件夾。工程的源文件,是構(gòu)成工程的主要文件,軟件開發(fā)的源文件,是構(gòu)成工程的主要文件,軟件開發(fā)時(shí)編寫的代碼都是寫在源文件內(nèi)的。時(shí)編寫的代碼都是寫在源文件內(nèi)的。CMD文件文件 .cmd文件,用來(lái)分配存儲(chǔ)空間的。文件,用來(lái)分配存儲(chǔ)空間的。包含所有的頭包含所有的頭文件,只要添文件,只要添加了這個(gè)頭文加了這個(gè)頭文件,其他的都件,其他的都被添加到所建被添加到所建工程下。工程下。4.1.1頭文件頭文件是以頭文件是以.h為后綴的文件。為后綴的文件。h即為即為“head”的縮寫。的縮寫。F2812的頭文件主要定義了芯片內(nèi)部的寄存器結(jié)構(gòu)、終

3、端服的頭文件主要定義了芯片內(nèi)部的寄存器結(jié)構(gòu)、終端服務(wù)程序等內(nèi)容。務(wù)程序等內(nèi)容。創(chuàng)建新工程的時(shí)候,將表中所列頭文件和新建的工程文件放創(chuàng)建新工程的時(shí)候,將表中所列頭文件和新建的工程文件放在同一個(gè)文件夾里,然后在使用到頭文件的源文件內(nèi)加入在同一個(gè)文件夾里,然后在使用到頭文件的源文件內(nèi)加入代碼代碼“#include”DSP28_device.h”工程編譯的時(shí)候,工程編譯的時(shí)候,CCS會(huì)自動(dòng)掃描并將所有相關(guān)的頭文件添加到工程中。會(huì)自動(dòng)掃描并將所有相關(guān)的頭文件添加到工程中。序號(hào)序號(hào)文件名文件名主要內(nèi)容主要內(nèi)容1 1DSP28_Adc.hDSP28_Adc.h模數(shù)轉(zhuǎn)換模數(shù)轉(zhuǎn)換(ADC)(ADC)寄存器的相關(guān)

4、定義寄存器的相關(guān)定義2 2DSP28_CpuTimers.hDSP28_CpuTimers.h3232位位CPUCPU定時(shí)器寄存器的相關(guān)定義定時(shí)器寄存器的相關(guān)定義3 3DSP28_DefaultISR.hDSP28_DefaultISR.hF2812F2812默認(rèn)中斷服務(wù)程序的定義默認(rèn)中斷服務(wù)程序的定義4 4DSP28_DevEmu.hDSP28_DevEmu.hF2812F2812硬件仿真寄存器的相關(guān)定義硬件仿真寄存器的相關(guān)定義5 5DSP28_Device.hDSP28_Device.h包含所有的頭文件、目標(biāo)包含所有的頭文件、目標(biāo)CPUCPU類型的選擇類型的選擇(F2812(F2812或或

5、F2810)F2810)、常用標(biāo)量的定義等內(nèi)容、常用標(biāo)量的定義等內(nèi)容6 6DSP28_Ecan.hDSP28_Ecan.h增強(qiáng)型增強(qiáng)型CANCAN寄存器的相關(guān)定義寄存器的相關(guān)定義7 7DSP28_Ev.hDSP28_Ev.h事件管理器事件管理器(EV)(EV)寄存器的定義寄存器的定義8 8DSP28_GlobalPrototypes.hDSP28_GlobalPrototypes.h全局函數(shù)的聲明全局函數(shù)的聲明9 9DSP28_Gpio.hDSP28_Gpio.h通用輸入輸出通用輸入輸出(Gpio)(Gpio)寄存器相關(guān)定義寄存器相關(guān)定義1010DSP28_McBsp.hDSP28_McBsp

6、.h多通道緩沖串行口(多通道緩沖串行口(McBspMcBsp)寄存器相關(guān)定義)寄存器相關(guān)定義1111DSP28_PieCtrl.hDSP28_PieCtrl.hPIEPIE控制寄存器的相關(guān)定義控制寄存器的相關(guān)定義1212DSP28_PieVect.hDSP28_PieVect.hPIEPIE中斷向量表的定義中斷向量表的定義1313DSP28_Sci.hDSP28_Sci.h串行通信接口串行通信接口(SCI)(SCI)寄存器的相關(guān)定義寄存器的相關(guān)定義1414DSP28_Spi.hDSP28_Spi.h串行外圍設(shè)備接口串行外圍設(shè)備接口(SPI)(SPI)寄存器的相關(guān)定義寄存器的相關(guān)定義1515DS

7、P28_SysCtrl.hDSP28_SysCtrl.h系統(tǒng)控制寄存器的相關(guān)定義系統(tǒng)控制寄存器的相關(guān)定義1616DSP28_Xintf.hDSP28_Xintf.h外部接口寄存器的相關(guān)定義外部接口寄存器的相關(guān)定義1717DSP28_XIntrupt.hDSP28_XIntrupt.h外部中斷寄存器的相關(guān)定義外部中斷寄存器的相關(guān)定義自己創(chuàng)建頭文件,主要用來(lái)定義一些變量能夠在整個(gè)工程內(nèi)使用,自己創(chuàng)建頭文件,主要用來(lái)定義一些變量能夠在整個(gè)工程內(nèi)使用,也就是作用域在整個(gè)工程的全局變量。也就是作用域在整個(gè)工程的全局變量。首先需要在某個(gè)頭文件中進(jìn)行定義,然后在源文件中進(jìn)行聲明。首先需要在某個(gè)頭文件中進(jìn)行定

8、義,然后在源文件中進(jìn)行聲明。然后添加到當(dāng)前工程目錄下。然后添加到當(dāng)前工程目錄下。錯(cuò)誤!錯(cuò)誤!正確!正確!1, 1, 將所創(chuàng)建的頭文件和其他頭文件放在相同的路徑下將所創(chuàng)建的頭文件和其他頭文件放在相同的路徑下2, 2, 在在DSP_Device.hDSP_Device.h中包含其他頭文件的代碼中加入語(yǔ)句中包含其他頭文件的代碼中加入語(yǔ)句“#include#include“DSP28_Global-Variable.h”DSP28_Global-Variable.h”4.1.2 庫(kù)文件庫(kù)文件是以庫(kù)文件是以.lib為后綴的文件為后綴的文件Lib即即“l(fā)ibrary”的縮寫的縮寫CCS中庫(kù)文件的默認(rèn)路徑為

9、:中庫(kù)文件的默認(rèn)路徑為:C:CCStudio_v3.3c2000cgtoolslib庫(kù)文件不僅包含了寄存器的地址與對(duì)應(yīng)標(biāo)示符庫(kù)文件不僅包含了寄存器的地址與對(duì)應(yīng)標(biāo)示符的定義,還包含了的定義,還包含了C/C+運(yùn)行支持庫(kù)函數(shù),如運(yùn)行支持庫(kù)函數(shù),如系統(tǒng)啟動(dòng)函數(shù)系統(tǒng)啟動(dòng)函數(shù)_c_int00等。等。C28xx相關(guān)的庫(kù)文件有相關(guān)的庫(kù)文件有4個(gè):個(gè):rts2800.lib、 rts2800_eh.lib、 rts2800_ml.lib和和 rts2800_ml_eh.lib、靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別(1)作用都是將函數(shù)封裝在一起經(jīng)過(guò)編譯之后供自己或作用都是將函數(shù)封裝在一起經(jīng)過(guò)編譯之后供自己或者他人調(diào)用。優(yōu)點(diǎn)在于編

10、譯后的庫(kù)文件是看不者他人調(diào)用。優(yōu)點(diǎn)在于編譯后的庫(kù)文件是看不到源碼的,保密性很好,同時(shí)也不會(huì)因?yàn)椴恍〉皆创a的,保密性很好,同時(shí)也不會(huì)因?yàn)椴恍⌒男薷牧撕瘮?shù)出問(wèn)題,便于維護(hù)心修改了函數(shù)出問(wèn)題,便于維護(hù) lib是編譯時(shí)需要的,而是編譯時(shí)需要的,而dll是運(yùn)行時(shí)需要的。如果是運(yùn)行時(shí)需要的。如果要完成源代碼的編譯,有要完成源代碼的編譯,有l(wèi)ib就夠了。如果要使就夠了。如果要使動(dòng)態(tài)鏈接的程序運(yùn)行起來(lái),有動(dòng)態(tài)鏈接的程序運(yùn)行起來(lái),有dll就夠了。當(dāng)然,就夠了。當(dāng)然,在開發(fā)和調(diào)試階段,最好兩者都有。在開發(fā)和調(diào)試階段,最好兩者都有。 .lib .dll靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別(2) 一般的動(dòng)態(tài)庫(kù)程序有一般的動(dòng)態(tài)庫(kù)程序有

11、lib文件和文件和dll文件。文件。lib文件是文件是必須在編譯期就連接到應(yīng)用程序中的,而必須在編譯期就連接到應(yīng)用程序中的,而dll文件文件是運(yùn)行期才會(huì)被調(diào)用的。是運(yùn)行期才會(huì)被調(diào)用的。如果有如果有dll文件,那么對(duì)文件,那么對(duì)應(yīng)的應(yīng)的lib文件一般是一些索引信息,具體的實(shí)現(xiàn)在文件一般是一些索引信息,具體的實(shí)現(xiàn)在dll文件中文件中。如果只有。如果只有l(wèi)ib文件,那么這個(gè)文件,那么這個(gè)lib文件文件是靜態(tài)編譯出來(lái)的,索引和實(shí)現(xiàn)都在其中。靜態(tài)是靜態(tài)編譯出來(lái)的,索引和實(shí)現(xiàn)都在其中。靜態(tài)編譯的編譯的lib文件優(yōu)點(diǎn)是給用戶安裝時(shí)就不需要再掛文件優(yōu)點(diǎn)是給用戶安裝時(shí)就不需要再掛動(dòng)態(tài)庫(kù)了。但也有缺點(diǎn),就是導(dǎo)致應(yīng)

12、用程序比較動(dòng)態(tài)庫(kù)了。但也有缺點(diǎn),就是導(dǎo)致應(yīng)用程序比較大,而且失去了動(dòng)態(tài)庫(kù)的靈活性,在版本升級(jí)時(shí),大,而且失去了動(dòng)態(tài)庫(kù)的靈活性,在版本升級(jí)時(shí),同時(shí)要發(fā)布新的應(yīng)用程序才行。同時(shí)要發(fā)布新的應(yīng)用程序才行。靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別(3) 在動(dòng)態(tài)庫(kù)的情況下,有兩個(gè)文件,一個(gè)是引入在動(dòng)態(tài)庫(kù)的情況下,有兩個(gè)文件,一個(gè)是引入庫(kù)(庫(kù)(.lib)文件,一個(gè)是)文件,一個(gè)是dll文件,引入庫(kù)文件文件,引入庫(kù)文件包含被包含被dll導(dǎo)出的函數(shù)的名稱和位置,導(dǎo)出的函數(shù)的名稱和位置,dll包含包含實(shí)際的函數(shù)和數(shù)據(jù),應(yīng)用程序使用實(shí)際的函數(shù)和數(shù)據(jù),應(yīng)用程序使用lib文件鏈接文件鏈接到所需要使用的到所需要使用的dll文件,庫(kù)中的函數(shù)和

13、數(shù)據(jù)并文件,庫(kù)中的函數(shù)和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可執(zhí)行文件中,執(zhí)行文件中,存放的不是被調(diào)用的函數(shù)代碼,存放的不是被調(diào)用的函數(shù)代碼,而是而是dll中所要調(diào)用的函數(shù)的內(nèi)存地址,中所要調(diào)用的函數(shù)的內(nèi)存地址,這樣當(dāng)這樣當(dāng)一個(gè)或多個(gè)應(yīng)用程序運(yùn)行是再把程序代碼和被一個(gè)或多個(gè)應(yīng)用程序運(yùn)行是再把程序代碼和被調(diào)用的函數(shù)代碼鏈接起來(lái),從而節(jié)省了內(nèi)存資調(diào)用的函數(shù)代碼鏈接起來(lái),從而節(jié)省了內(nèi)存資源。源。 在在DSP開發(fā)中,通常只須關(guān)注開發(fā)中,通常只須關(guān)注lib文件即可。四個(gè)文件即可。四個(gè)庫(kù)函數(shù)庫(kù)函數(shù)TI并未給出詳細(xì)說(shuō)明,參考英文說(shuō)明,實(shí)并未給出詳細(xì)說(shuō)明,參考英

14、文說(shuō)明,實(shí)際使用時(shí),編譯錯(cuò)誤就更換庫(kù)函數(shù)重新嘗試。際使用時(shí),編譯錯(cuò)誤就更換庫(kù)函數(shù)重新嘗試。4.1.3 源文件源文件是以源文件是以.c為后綴的文件為后綴的文件C即為即為“source”的縮寫的縮寫源文件是整個(gè)工程的核心,包含了所有需源文件是整個(gè)工程的核心,包含了所有需要實(shí)現(xiàn)的功能的代碼要實(shí)現(xiàn)的功能的代碼TI為為F2812的開發(fā)已經(jīng)準(zhǔn)備好了很多源文件,的開發(fā)已經(jīng)準(zhǔn)備好了很多源文件,通常在里頭添加代碼實(shí)現(xiàn)期望的功能通常在里頭添加代碼實(shí)現(xiàn)期望的功能但但main函數(shù)(主函數(shù))文件需要開發(fā)者根函數(shù)(主函數(shù))文件需要開發(fā)者根據(jù)自己實(shí)際情況編寫。據(jù)自己實(shí)際情況編寫。F2812常用的源文件序號(hào)序號(hào)文件名文件名主

15、要內(nèi)容主要內(nèi)容1 1DSP28_Adc.cDSP28_Adc.cADAD初始化函數(shù)初始化函數(shù)2 2DSP28_CpuTimers.cDSP28_CpuTimers.cCPUCPU定時(shí)器初始化函數(shù)定時(shí)器初始化函數(shù)3 3DSP28_ECan.cDSP28_ECan.c增強(qiáng)型增強(qiáng)型CanCan初始化函數(shù)初始化函數(shù)4 4DSP28_Ev.cDSP28_Ev.c事件管理器事件管理器EvEv初始化函數(shù)初始化函數(shù)5 5DSP28_Gpio.cDSP28_Gpio.c通用通用I/OI/O模塊初始化函數(shù)模塊初始化函數(shù)6 6DSP28_Mcbsp.cDSP28_Mcbsp.c多通道緩沖串行口初始化函數(shù)多通道緩沖串

16、行口初始化函數(shù)7 7DSP28_Sci.cDSP28_Sci.c串行通信接口初始化函數(shù)串行通信接口初始化函數(shù)8 8DSP28_Spi.cDSP28_Spi.c串行外圍接口初始化函數(shù)串行外圍接口初始化函數(shù)9 9DSP28_SysCtrl.cDSP28_SysCtrl.c系統(tǒng)控制模塊初始化函數(shù)系統(tǒng)控制模塊初始化函數(shù)1010DSP28_Xintf.cDSP28_Xintf.c外部接口初始化函數(shù)外部接口初始化函數(shù)1111DSP28_XIntruptDSP28_XIntrupt外部中斷初始化函數(shù)外部中斷初始化函數(shù)1212DSP28_InitPeripherals.cDSP28_InitPeriphera

17、ls.c包含了其他的外設(shè)初始化函數(shù)包含了其他的外設(shè)初始化函數(shù)1313DSP28_PieCtrl.cDSP28_PieCtrl.cPIEPIE控制模塊初始化函數(shù)控制模塊初始化函數(shù)1414DSP28_PieVect.cDSP28_PieVect.c對(duì)對(duì)PIEPIE中斷向量進(jìn)行初始化中斷向量進(jìn)行初始化1515DSP28_DefaultIsr.cDSP28_DefaultIsr.c包含了包含了F2812F2812所有外設(shè)中斷函數(shù)所有外設(shè)中斷函數(shù)1616DSP28_GlobalVariableDefs.cDSP28_GlobalVariableDefs.c定義了定義了F2812F2812的全局變量和數(shù)據(jù)

18、段程序的全局變量和數(shù)據(jù)段程序CMD文件CMD文件的作用是為代碼和數(shù)據(jù)文件的作用是為代碼和數(shù)據(jù)分配存儲(chǔ)分配存儲(chǔ)空間空間F2812工程中的工程中的CMD文件有兩種:文件有兩種:一種是分配一種是分配RAM空間,用于將程序下載到空間,用于將程序下載到RAM空間進(jìn)行調(diào)試空間進(jìn)行調(diào)試一種是分配一種是分配FLASH空間,用于將程序固化到空間,用于將程序固化到FLASH空間空間4.2 通用擴(kuò)展語(yǔ)言GEL GEL是是General Extended Language的縮寫,即的縮寫,即通通用擴(kuò)展語(yǔ)言用擴(kuò)展語(yǔ)言,是一種類似,是一種類似于于C的解釋性語(yǔ)言。用戶的解釋性語(yǔ)言。用戶可以通過(guò)在文件中使用可以通過(guò)在文件中使

19、用GEL語(yǔ)言來(lái)創(chuàng)建函數(shù),從語(yǔ)言來(lái)創(chuàng)建函數(shù),從而擴(kuò)展而擴(kuò)展CCS的功能。通過(guò)的功能。通過(guò)GEL,可以訪問(wèn)目標(biāo)板的,可以訪問(wèn)目標(biāo)板的存儲(chǔ)器,并為存儲(chǔ)器,并為CCS的的GEL菜單添加選項(xiàng)。菜單添加選項(xiàng)。 4.2.2-1 GEL函數(shù)的定義 GEL函數(shù)定義函數(shù)定義: funcName(parameter1 ,parameter2 , parameter n) statements GEL函數(shù)名函數(shù)名有效的有效的GEL參數(shù)參數(shù)有效的有效的GEL語(yǔ)句語(yǔ)句4.2.1 GEL語(yǔ)法 GELGEL語(yǔ)法支持的語(yǔ)句類型語(yǔ)法支持的語(yǔ)句類型序號(hào)序號(hào)GELGEL語(yǔ)法支持的語(yǔ)句語(yǔ)法支持的語(yǔ)句1 1GELGEL函數(shù),包括函數(shù)的定

20、義、參數(shù)、調(diào)用函數(shù),包括函數(shù)的定義、參數(shù)、調(diào)用2 2ReturnReturn語(yǔ)句語(yǔ)句3 3If-elseIf-else語(yǔ)句語(yǔ)句4 4WhileWhile語(yǔ)句語(yǔ)句5 5GELGEL注釋語(yǔ)句注釋語(yǔ)句6 6預(yù)處理語(yǔ)句預(yù)處理語(yǔ)句 GELGEL是是C C語(yǔ)言的一個(gè)子集。但語(yǔ)言的一個(gè)子集。但GELGEL函數(shù)不需要指定函數(shù)返回值的函數(shù)不需要指定函數(shù)返回值的類型,也不需要任何頭信息來(lái)定義所要求的參數(shù)類型,該信息類型,也不需要任何頭信息來(lái)定義所要求的參數(shù)類型,該信息通過(guò)數(shù)據(jù)值自動(dòng)獲得。通過(guò)數(shù)據(jù)值自動(dòng)獲得。定義平方函數(shù)square(a) return a*a;square(1.5)=2.25;square(3)=

21、9。GEL函數(shù)名函數(shù)名有效的有效的GEL參數(shù)參數(shù)有效的有效的GEL語(yǔ)句語(yǔ)句定義初始化對(duì)話框函數(shù)dialog Init(filename “File to be Loaded”, CPUname “CPU Name”,initValue “Initialization Value”) GEL_Load(filename, CPUname); a=initValue;關(guān)鍵字,意思是關(guān)鍵字,意思是“對(duì)話框?qū)υ捒颉?,調(diào)用函數(shù),調(diào)用函數(shù)“Init”時(shí),會(huì)彈出對(duì)話框,且對(duì)話框有三個(gè)項(xiàng),即三時(shí),會(huì)彈出對(duì)話框,且對(duì)話框有三個(gè)項(xiàng),即三個(gè)參數(shù)個(gè)參數(shù)字符串是對(duì)該參數(shù)的描述字符串是對(duì)該參數(shù)的描述調(diào)用調(diào)用CCS內(nèi)部函數(shù)

22、,這個(gè)函數(shù)要求內(nèi)部函數(shù),這個(gè)函數(shù)要求用一個(gè)用一個(gè)字符串來(lái)標(biāo)識(shí)第一個(gè)參數(shù),也必須把一個(gè)字符串來(lái)標(biāo)識(shí)第一個(gè)參數(shù),也必須把一個(gè)字符串傳遞給第一個(gè)參數(shù)字符串傳遞給第一個(gè)參數(shù)。CPUname是是可選的可選的必須在必須在DSP工程工程中定義,否則出錯(cuò)中定義,否則出錯(cuò)對(duì)剛才定義的對(duì)剛才定義的InitInit函數(shù)的有效調(diào)用格式:函數(shù)的有效調(diào)用格式:Init(“C:CCStudio_v3.3MyProjectsgpiodebuggpio.out”, ”cpu_a”,0)4.2.2-2 GEL函數(shù)的參數(shù)可以通過(guò)在可以通過(guò)在GEL函數(shù)中定義參數(shù)來(lái)將自變量傳遞給函數(shù)中定義參數(shù)來(lái)將自變量傳遞給一個(gè)一個(gè)GEL函數(shù)。與函數(shù)

23、。與C函數(shù)參數(shù)不同的是,函數(shù)參數(shù)不同的是,GEL函數(shù)的函數(shù)的參數(shù)類型并不需要定義,只要求參數(shù)名參數(shù)類型并不需要定義,只要求參數(shù)名。參數(shù)的類。參數(shù)的類型由傳遞的自變量自動(dòng)決定。型由傳遞的自變量自動(dòng)決定。GEL參數(shù)可以是以下任意一種:參數(shù)可以是以下任意一種:(1)一個(gè)實(shí)際的)一個(gè)實(shí)際的/仿真的仿真的DSP目標(biāo)板符號(hào)值。目標(biāo)板符號(hào)值。(2)一個(gè)數(shù)字常量,如果傳遞的是表達(dá)式或者常)一個(gè)數(shù)字常量,如果傳遞的是表達(dá)式或者常數(shù)值。數(shù)值。(3)一個(gè)字符串常量。)一個(gè)字符串常量。分析GEL函數(shù)參數(shù)Initialize(a,filename,b)targVar=b;a=0;GEL_Load(filename);r

24、eturn b*b;下面是對(duì)函數(shù)Initialize的正確調(diào)用:Initialize(targetSymbol,“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”,28*4+2.52)。參數(shù)參數(shù)a被確定為被確定為DSP的標(biāo)識(shí)符的標(biāo)識(shí)符targetSymbol,參數(shù),參數(shù)filename初初始化為字符串常量,參數(shù)始化為字符串常量,參數(shù)b通過(guò)計(jì)算稱為常數(shù)通過(guò)計(jì)算稱為常數(shù)114.52如果不將如果不將DSPDSP標(biāo)識(shí)符傳遞給參數(shù)標(biāo)識(shí)符傳遞給參數(shù)a a,則執(zhí)行第,則執(zhí)行第二個(gè)語(yǔ)句二個(gè)語(yǔ)句“a=0a=0”時(shí)就會(huì)產(chǎn)生一個(gè)運(yùn)行錯(cuò)誤。時(shí)就會(huì)產(chǎn)生一個(gè)運(yùn)行錯(cuò)誤。還需保證在還需保

25、證在GELGEL函數(shù)運(yùn)行之前,這個(gè)標(biāo)識(shí)符函數(shù)運(yùn)行之前,這個(gè)標(biāo)識(shí)符的信息已經(jīng)加載給了的信息已經(jīng)加載給了CCSCCS調(diào)試器。調(diào)試器。如果標(biāo)識(shí)符如果標(biāo)識(shí)符targetSymboltargetSymbol已經(jīng)被定義了,則上已經(jīng)被定義了,則上述函數(shù)的調(diào)用會(huì)將目標(biāo)標(biāo)識(shí)符賦值為述函數(shù)的調(diào)用會(huì)將目標(biāo)標(biāo)識(shí)符賦值為0 0GELGEL函數(shù)的參數(shù)除了可以是函數(shù)的參數(shù)除了可以是DSPDSP目標(biāo)板的標(biāo)識(shí)目標(biāo)板的標(biāo)識(shí)符外,還可以是數(shù)值或字符串,如符外,還可以是數(shù)值或字符串,如1 1、3.14153.1415、“C:CCStudio_v3.3C:CCStudio_v3.3MyProjectsMyProjectsgpiogpi

26、oDebDebuguggpio.outgpio.out”等。等。對(duì)于數(shù)值參量,對(duì)于數(shù)值參量,GELGEL允許向其傳遞任何有效允許向其傳遞任何有效的的C C表達(dá)式這個(gè)表達(dá)式在傳遞表達(dá)式這個(gè)表達(dá)式在傳遞給函數(shù)之前被計(jì)給函數(shù)之前被計(jì)算算出來(lái)。如果結(jié)果包含有小數(shù)點(diǎn)或指數(shù)符號(hào),出來(lái)。如果結(jié)果包含有小數(shù)點(diǎn)或指數(shù)符號(hào),如如1.21.2或或1.34e41.34e4,它將被當(dāng)做實(shí)型變量,否則就,它將被當(dāng)做實(shí)型變量,否則就是整型變量。是整型變量。下面的格式均正確調(diào)用下面的格式均正確調(diào)用InitializeInitialize函數(shù):函數(shù):Initialize(targetSymbol,“C:CCStudio_v3.

27、3MyProjectsgpioDebuggpio.out”,10)Initialize(targetSymbol,“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”,1.2)整型整型實(shí)型實(shí)型執(zhí)行第一個(gè)語(yǔ)句執(zhí)行第一個(gè)語(yǔ)句targVar=b時(shí),如果目標(biāo)變量時(shí),如果目標(biāo)變量targetVar是是整型,而參數(shù)整型,而參數(shù)b為實(shí)型時(shí),參數(shù)為實(shí)型時(shí),參數(shù)b將會(huì)被截尾。將會(huì)被截尾。4.2.2-3 GEL函數(shù)的調(diào)用 通??梢栽诳梢暂斎胪ǔ?梢栽诳梢暂斎隒表達(dá)式的任何地方調(diào)表達(dá)式的任何地方調(diào)用一個(gè)用一個(gè)GEL函數(shù);可以從任何能接受有效函數(shù);可以從任何能接受有效C表達(dá)式的對(duì)話

28、框中調(diào)用一個(gè)表達(dá)式的對(duì)話框中調(diào)用一個(gè)GEL函數(shù);還函數(shù);還可以在一個(gè)可以在一個(gè)GEL函數(shù)中調(diào)用另一個(gè)函數(shù)中調(diào)用另一個(gè)GEL函數(shù)。函數(shù)。GEL函數(shù)不支持遞歸調(diào)用函數(shù)不支持遞歸調(diào)用當(dāng)一個(gè)當(dāng)一個(gè)GEL函數(shù)正在被執(zhí)行時(shí),不能運(yùn)行它函數(shù)正在被執(zhí)行時(shí),不能運(yùn)行它自己的其他副本。自己的其他副本。 4.2.3 GEL語(yǔ)句返回語(yǔ)句返回語(yǔ)句If-else語(yǔ)句語(yǔ)句While語(yǔ)句語(yǔ)句注釋語(yǔ)句注釋語(yǔ)句預(yù)處理語(yǔ)句預(yù)處理語(yǔ)句GEL返回語(yǔ)句GELGEL在一個(gè)函數(shù)里支持標(biāo)準(zhǔn)在一個(gè)函數(shù)里支持標(biāo)準(zhǔn)C C的返回語(yǔ)句,的返回語(yǔ)句,其一般形式為:其一般形式為:return expressionreturn expression;一個(gè)返回

29、語(yǔ)句并不是一定需要返回一個(gè)值,一個(gè)沒(méi)有一個(gè)返回語(yǔ)句并不是一定需要返回一個(gè)值,一個(gè)沒(méi)有表達(dá)式的返回語(yǔ)句將控制返回到調(diào)用處,并不返回有表達(dá)式的返回語(yǔ)句將控制返回到調(diào)用處,并不返回有用的值。用的值。與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)C C區(qū)別:區(qū)別:GELGEL函數(shù)定義不需指定返回值類型,函數(shù)定義不需指定返回值類型,返回值類型在程序運(yùn)行時(shí)決定。返回值類型在程序運(yùn)行時(shí)決定。GEL if-else語(yǔ)句GEL支持標(biāo)準(zhǔn)支持標(biāo)準(zhǔn)C的的if-else語(yǔ)句。通用格式為:語(yǔ)句。通用格式為:if(expression) statement1else statement2GEL if-else語(yǔ)句例:例:if(ab) C=a-bElse c

30、=b-a; d=b+a;GEL while語(yǔ)句GELGEL的的whilewhile語(yǔ)句類似于標(biāo)準(zhǔn)語(yǔ)句類似于標(biāo)準(zhǔn)C C的的whilewhile語(yǔ)句,語(yǔ)句,但是但是GELGEL不支持標(biāo)準(zhǔn)不支持標(biāo)準(zhǔn)C C的的continuecontinue和和breakbreak語(yǔ)句。語(yǔ)句。通用格式為:通用格式為:whilewhile(expressionexpression) statementstatement例:例:while(a!=b)while(a!=b) c=a c=a* *b; b; a+; a+; GEL while語(yǔ)句GEL注釋GEL支持標(biāo)準(zhǔn)支持標(biāo)準(zhǔn)C語(yǔ)言的注釋。語(yǔ)言的注釋。GEL的注釋,的注釋,

31、限用字符限用字符“/*”和和“*/”,可以跨越,可以跨越若干行。若干行。 while(a!=b)while(a!=b) c=a c=a* *b; b; a+; a+;/ /* *此處需要改變自變量的值來(lái)控制循環(huán)此處需要改變自變量的值來(lái)控制循環(huán)* */ / GEL預(yù)處理語(yǔ)句GELGEL支持標(biāo)準(zhǔn)支持標(biāo)準(zhǔn)C C的的#define#define預(yù)處理關(guān)鍵字,預(yù)處理關(guān)鍵字,這也是唯一可用的預(yù)處理關(guān)鍵字。這也是唯一可用的預(yù)處理關(guān)鍵字。下面的語(yǔ)句,使預(yù)處理器用給定的字符序列取代標(biāo)識(shí)符,下面的語(yǔ)句,使預(yù)處理器用給定的字符序列取代標(biāo)識(shí)符,其中字符序列前后的空格都不要:其中字符序列前后的空格都不要: #defin

32、e identifier token-sequence#define identifier token-sequence下面的語(yǔ)句(第一個(gè)標(biāo)識(shí)符和括號(hào)之間沒(méi)有空格)下面的語(yǔ)句(第一個(gè)標(biāo)識(shí)符和括號(hào)之間沒(méi)有空格)是一個(gè)宏定義,其參數(shù)是標(biāo)識(shí)符列表:是一個(gè)宏定義,其參數(shù)是標(biāo)識(shí)符列表: #define identifier#define identifier( (identifier-listidentifier-list) ) token-sequence token-sequence加載或卸載GEL函數(shù)要將包含要將包含GELGEL函數(shù)的函數(shù)的GELGEL文件加載到文件加載到CCSCCS才能才能在文件

33、中訪問(wèn),駐留在在文件中訪問(wèn),駐留在CCSCCS的存儲(chǔ)器中,隨的存儲(chǔ)器中,隨時(shí)執(zhí)行,失效在移除文件之后。時(shí)執(zhí)行,失效在移除文件之后。當(dāng)加載的文件被修改,必須先將其卸載,然當(dāng)加載的文件被修改,必須先將其卸載,然后再修改生效后重新加載。后再修改生效后重新加載。GELGEL加載器在加載時(shí)要檢查加載器在加載時(shí)要檢查GELGEL文件的語(yǔ)法文件的語(yǔ)法錯(cuò)誤,但不檢查變量是否定義。錯(cuò)誤,但不檢查變量是否定義。加載或卸載GEL函數(shù)加載一個(gè)加載一個(gè)GEL步驟:步驟:選擇選擇FileLoad GEL菜單項(xiàng)菜單項(xiàng)在彈出的在彈出的Load GEL File對(duì)話框中,瀏覽找對(duì)話框中,瀏覽找到包含到包含GEL函數(shù)的函數(shù)的GE

34、L文件。(文件。(CCS存放存放GEL文件路徑:文件路徑:CCS安裝路徑安裝路徑ccgel)雙擊文件名,或者單擊文件名后點(diǎn)擊雙擊文件名,或者單擊文件名后點(diǎn)擊“打打開開”按鈕。按鈕。加載或卸載GEL函數(shù)卸載一個(gè)卸載一個(gè)GEL步驟:步驟:選擇選擇ViewProject菜單項(xiàng)菜單項(xiàng)單擊單擊GEL文件夾旁邊的文件夾旁邊的“+”號(hào),查看號(hào),查看GEL文件文件右擊需要卸載的右擊需要卸載的GEL文件文件在所彈出的快捷菜單中選擇在所彈出的快捷菜單中選擇Remove4.2.5 使用關(guān)鍵字在GEL菜單中添加GEL函數(shù)4.2.5-1 關(guān)鍵字hotmenu使用關(guān)鍵字使用關(guān)鍵字hotmenuhotmenu,將一個(gè),將一

35、個(gè)GELGEL函數(shù)添加到函數(shù)添加到GELGEL菜單菜單里,則該函數(shù)一旦被選中就立即執(zhí)行,其語(yǔ)法如下:里,則該函數(shù)一旦被選中就立即執(zhí)行,其語(yǔ)法如下: hotmenuhotmenu funcnamefuncname statements statements 例:Menuitem “My Functions”;hotmenu InitTarget() *waitstate=0 x11;Hotmenu LoadMyProg() GEL_Load(“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”)自動(dòng)加載文件自動(dòng)加載文件gpio.out4.2.5-2 關(guān)鍵字di

36、alog使用關(guān)鍵字使用關(guān)鍵字dialog,向,向GEL菜單添加菜單添加GEL函數(shù),函數(shù),并為參數(shù)輸入創(chuàng)建一個(gè)并為參數(shù)輸入創(chuàng)建一個(gè)對(duì)話框?qū)υ捒?。從。從GEL菜單選擇該函數(shù)時(shí),菜單選擇該函數(shù)時(shí),會(huì)出現(xiàn)一個(gè)對(duì)話窗口,并提示輸入?yún)?shù)。會(huì)出現(xiàn)一個(gè)對(duì)話窗口,并提示輸入?yún)?shù)。函數(shù)定義時(shí)緊跟在參數(shù)后面的字符串用來(lái)在對(duì)話窗口里描述參數(shù)。函數(shù)定義時(shí)緊跟在參數(shù)后面的字符串用來(lái)在對(duì)話窗口里描述參數(shù)。其語(yǔ)法如下:其語(yǔ)法如下: dialog funcName(paramName1 “param1 definition”, paramName2 “param2 definition”,) statementsMenuite

37、m “My Functions”;dialog InitTarget(StartAddress ”Starting Address”, EndAddress” End Address”) statements;dialog RefreshTarget() statements;例:4.2.5-3 關(guān)鍵字slider使用關(guān)鍵字使用關(guān)鍵字slider,向,向GEL菜單添加菜單添加GEL函數(shù)。函數(shù)。當(dāng)從當(dāng)從GEL菜單執(zhí)行該函數(shù)時(shí),就會(huì)出現(xiàn)滑動(dòng)條來(lái)控制傳遞給菜單執(zhí)行該函數(shù)時(shí),就會(huì)出現(xiàn)滑動(dòng)條來(lái)控制傳遞給GEL函數(shù)的值。函數(shù)的值。每次移動(dòng)滑動(dòng)條,就用新的參數(shù)來(lái)調(diào)用每次移動(dòng)滑動(dòng)條,就用新的參數(shù)來(lái)調(diào)用GEL函數(shù),函數(shù),該參數(shù)反映的是滑動(dòng)條的位置。其格式如下:該參數(shù)反映的是滑動(dòng)條的位置。其格式如下:Slider parma_definition(minVal,maxVal,increment,pageIncrement,paraName) statements; Memuitem ”My Functions”;Slider volumeControl (0,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論