第6章DSP_C語言程序設(shè)計(jì)_第1頁
第6章DSP_C語言程序設(shè)計(jì)_第2頁
第6章DSP_C語言程序設(shè)計(jì)_第3頁
第6章DSP_C語言程序設(shè)計(jì)_第4頁
第6章DSP_C語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第6章章 C/C+語言程序設(shè)計(jì)語言程序設(shè)計(jì)6.1 C55X C/C+語言概述語言概述6.2 C55X C/C+語言編程基礎(chǔ)語言編程基礎(chǔ)6.5 C語言與匯編語言的混合編程語言與匯編語言的混合編程 6.5.1 在在C語言中直接嵌入?yún)R編語言語言中直接嵌入?yún)R編語言 6.5.2 C語言調(diào)用匯編模塊的接口語言調(diào)用匯編模塊的接口補(bǔ)充:補(bǔ)充: TI DSP軟件開發(fā)平臺(tái)軟件開發(fā)平臺(tái)l匯編語言依賴于計(jì)算機(jī)硬件,程序的可讀性和匯編語言依賴于計(jì)算機(jī)硬件,程序的可讀性和可移植性比較差。一般高級(jí)語言具有很好的可可移植性比較差。一般高級(jí)語言具有很好的可移植性,但是難以實(shí)現(xiàn)匯編語言的某些功能移植性,但是難以實(shí)現(xiàn)匯編語言的某

2、些功能(如對(duì)內(nèi)存地址的操作、位操作等)。(如對(duì)內(nèi)存地址的操作、位操作等)。lC/C+語言作為一種高級(jí)語言,既可以訪問物語言作為一種高級(jí)語言,既可以訪問物理地址又可以進(jìn)行位操作,能直接對(duì)硬件進(jìn)行理地址又可以進(jìn)行位操作,能直接對(duì)硬件進(jìn)行操作,適合用作操作,適合用作DSP開發(fā)語言。開發(fā)語言。6.1.1 C/C+語言概況語言概況6.1 C55X C/C+語言概述語言概述6.1.2 C55x C/C+語言概況語言概況lC55x C/C+編譯器全面支持編譯器全面支持ANSI C/C+語言標(biāo)準(zhǔn),能夠把按照標(biāo)準(zhǔn)語言標(biāo)準(zhǔn),能夠把按照標(biāo)準(zhǔn)ANSI C/C+規(guī)范編寫的源程序進(jìn)行全面優(yōu)化,編譯成規(guī)范編寫的源程序進(jìn)行全

3、面優(yōu)化,編譯成C55x 匯編語言源程序。匯編語言源程序。lC55x C/C+編譯器工具擁有完整的實(shí)時(shí)編譯器工具擁有完整的實(shí)時(shí)運(yùn)行庫運(yùn)行庫,所有的庫函數(shù)均符合所有的庫函數(shù)均符合ANSI庫標(biāo)準(zhǔn)。庫標(biāo)準(zhǔn)。C55X C/C+語言編程基礎(chǔ)語言編程基礎(chǔ)類型類型長度長度內(nèi)容內(nèi)容最小值最小值最大值最大值signed char(有符號(hào)有符號(hào)字符字符)16位位ASCII碼碼-3276832767unsigned char(無符號(hào)字符無符號(hào)字符)16位位ASCII碼碼065535short, signed short(短整型短整型)16位位二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼-3276832767unsigned short(無無

4、符號(hào)短整型符號(hào)短整型)16位位二進(jìn)制二進(jìn)制數(shù)數(shù)065535類類 型型長長 度度內(nèi)內(nèi) 容容最最 小小 值值最最 大大 值值int, signed int(整型)(整型)16位位二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼 3276832767unsigned int(無符號(hào)無符號(hào)整型)整型)16位位二進(jìn)制二進(jìn)制數(shù)數(shù)065535long, signed long(長(長整型)整型)32位位二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼 2 147 483 6482 147 483 647unsigned long(無符號(hào)(無符號(hào)長整型)長整型)32位位二進(jìn)制二進(jìn)制數(shù)數(shù)04 249 967 295long long(40位長整型)位長整型)40位位

5、二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼 549 755 813 888549 755 813 887unsigned long long(40位無符號(hào)長整型)位無符號(hào)長整型)40位位二進(jìn)制二進(jìn)制數(shù)數(shù)01 099 511 627 775emum(枚舉型)(枚舉型)16位位二進(jìn)制二進(jìn)制補(bǔ)碼補(bǔ)碼 3276832767float(浮點(diǎn)型)(浮點(diǎn)型)32位位32位浮位浮點(diǎn)數(shù)點(diǎn)數(shù)1.175 494e 383.40 282 346e+38類類 型型長長 度度 內(nèi)內(nèi) 容容最最 小小 值值最最 大大 值值double(雙精度浮點(diǎn)(雙精度浮點(diǎn)數(shù))數(shù))32位位32位浮位浮點(diǎn)數(shù)點(diǎn)數(shù)1.175 494e 383.40 282 346e+

6、38long double(長雙精(長雙精度浮點(diǎn)數(shù))度浮點(diǎn)數(shù))32位位32位浮位浮點(diǎn)數(shù)點(diǎn)數(shù)1.175 494e 383.40 282 346e+38大存儲(chǔ)器模式大存儲(chǔ)器模式23位位二進(jìn)制二進(jìn)制數(shù)數(shù)00 x7FFFFFpointers(程序指針)(程序指針)24位位二進(jìn)制二進(jìn)制數(shù)數(shù)00 xFFFFFF6.2.2 關(guān)鍵字關(guān)鍵字const lC55x C編譯器支持標(biāo)準(zhǔn)編譯器支持標(biāo)準(zhǔn)C語言的語言的const關(guān)鍵字。關(guān)鍵字。l將這個(gè)關(guān)鍵字使用到對(duì)任意變量或數(shù)組的定義上將這個(gè)關(guān)鍵字使用到對(duì)任意變量或數(shù)組的定義上可以確保它們的值不改變??梢源_保它們的值不改變。l如果定義一個(gè)對(duì)象為如果定義一個(gè)對(duì)象為const

7、,那么,那么const段就會(huì)為段就會(huì)為該對(duì)象分配存儲(chǔ)空間。使用該對(duì)象分配存儲(chǔ)空間。使用const關(guān)鍵字可以定義關(guān)鍵字可以定義大常數(shù)表并將它們分配到系統(tǒng)大常數(shù)表并將它們分配到系統(tǒng)ROM中。中。C55X C/C+語言編程基礎(chǔ)語言編程基礎(chǔ) 例:例:6.2.2 關(guān)鍵字關(guān)鍵字 int * const p=&x;const int *q=&x;定義指向變量定義指向變量int的常量指針的常量指針p定義指向常量定義指向常量int的變量指針的變量指針q 注意:注意:例,例,ioport關(guān)鍵字的使用。關(guān)鍵字的使用。ioport int k void foo(void)ioport int i io

8、port int *j ; /*正確正確* /; /*錯(cuò)誤錯(cuò)誤* /; /*正確正確* /例:定時(shí)器初始化例程例:定時(shí)器初始化例程 void TIMER_init(void) ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0 x1000;prd0 = (unsigned int *)0 x1001;tcr0 = (unsigned int *)0 x1002;prsc0 = (u

9、nsigned int *)0 x1003; *tcr0 = 0 x04f0; *tim0 = 0; *prd0 = 0 x0ffff; *prsc0 = 2; *tcr0 = 0 x00e0; 4. c_int00是是C/C+程序的入口點(diǎn),這個(gè)函數(shù)名被系統(tǒng)程序的入口點(diǎn),這個(gè)函數(shù)名被系統(tǒng)復(fù)位中斷保留,該中斷服務(wù)程序用來初始化系統(tǒng)并調(diào)用復(fù)位中斷保留,該中斷服務(wù)程序用來初始化系統(tǒng)并調(diào)用main函數(shù)。函數(shù)。關(guān)于中斷的幾個(gè)要點(diǎn)關(guān)于中斷的幾個(gè)要點(diǎn): :中斷服務(wù)程序不能中斷服務(wù)程序不能被普通被普通C C代碼調(diào)用。代碼調(diào)用。關(guān)鍵字關(guān)鍵字例:中斷服務(wù)程序例:中斷服務(wù)程序Void INTR_init( void

10、 )IVPD=0 xd0;IVPH=0 xd0;IER0=0 x10;DBIER0 =0 x10;IFR0=0 xffff;asm( BCLR INTM);interrupt void timer( ) .無參數(shù)無參數(shù)設(shè)置中斷寄存器設(shè)置中斷寄存器IER0IER0保存中斷入口的現(xiàn)場(chǎng)信息保存中斷入口的現(xiàn)場(chǎng)信息( (所用所用寄存器或全部寄存器)寄存器或全部寄存器)通過通過.sect.sect指令創(chuàng)建中指令創(chuàng)建中斷向量表。斷向量表。 .sect .vectors .ref _c_int00 .ref _timer rsv: B _c_int00 NOP .align 8nmi: .loop 8 nop

11、.endloopint0:.loop 8nop.endloopint2: B _timernop.align 8tint:B _timernop.align 8在匯編語言中,中斷程序名在匯編語言中,中斷程序名前加下劃線,如前加下劃線,如 _timer。關(guān)于中斷的幾個(gè)要點(diǎn)關(guān)于中斷的幾個(gè)要點(diǎn):中斷處理程序可以處理單個(gè)中中斷處理程序可以處理單個(gè)中斷或多個(gè)中斷,斷或多個(gè)中斷,c_int00除外除外保存中斷入口的現(xiàn)場(chǎng)信息保存中斷入口的現(xiàn)場(chǎng)信息 ( (所用寄存器或全部寄存器)所用寄存器或全部寄存器)volatile-存儲(chǔ)器訪問存儲(chǔ)器訪問l定義格式:定義格式: register 變量類型變量類型 變量名變量

12、名l變量類型:變量類型:l整型、浮點(diǎn)型整型、浮點(diǎn)型和和指針類型指針類型register6.2.4 asm指令指令 -插入一條匯編指令插入一條匯編指令l指令格式: asm (“assembler text”);main()int i;unsigned int uWork;while ( 1 )for ( i=0;ii,i=T0 RET; 在定義匯編函數(shù)時(shí),在函在定義匯編函數(shù)時(shí),在函數(shù)名前加下劃線數(shù)名前加下劃線“_”. 聲明為外部函數(shù)聲明為外部函數(shù)3: 在在C代碼中訪問匯編語言變量代碼中訪問匯編語言變量l訪問訪問.bss段或段或.usect段中沒有初始化的變量:段中沒有初始化的變量:u使用使用.b

13、ss或或.usect指令來定義變量指令來定義變量u使用使用.global指令來定義為外部變量指令來定義為外部變量u在匯編語言中的變量前加下劃線在匯編語言中的變量前加下劃線“_”u在在C代碼中聲明變量為外部變量并正常地訪問它代碼中聲明變量為外部變量并正常地訪問它(b)C程序:程序:extern int var;/* 外部變量外部變量 */var = 1;/* 使用變量使用變量 */(a)匯編語言程序:)匯編語言程序: .bss var,1;定義變量定義變量 .gloabal var;聲明變量為外部變量聲明變量為外部變量l非非.bss.bss段中變量訪問段中變量訪問- -定義指向該變量的指針定義指

14、向該變量的指針u定義變量定義變量u聲明一個(gè)指向該變量起始地址的全局指針聲明一個(gè)指向該變量起始地址的全局指針u在程序中,必須先聲明該對(duì)象為在程序中,必須先聲明該對(duì)象為externextern型。型。3: 在在C代碼中訪問匯編語言變量代碼中訪問匯編語言變量(a)匯編程序:)匯編程序: .global _sine .sect ”sine_tab”_sine: .float 0.0 .float 0.015987 .float 0.022145 (b)C程序:程序:extern float sine ;float *sine_p=sine;f=sine_p2;4. 在在C語言中訪問匯編語言常數(shù)語言中訪

15、問匯編語言常數(shù)l使用使用.set和和.global指令定義匯編語言全局常數(shù)。指令定義匯編語言全局常數(shù)。l使用使用&運(yùn)算符來取值。運(yùn)算符來取值。(a)匯編語言程序:)匯編語言程序:_table_size .set 10000;定義常量定義常量.global _table_size ;定義該常量為全局常量定義該常量為全局常量例:例:(b)語言程序:)語言程序:extern int table_size;#define TABLE_SIZE (int)(&table_size)For(i=0;iTABLE_SIZE;+i)C和匯編語言的接口注意:和匯編語言的接口注意:例:利于混合編程

16、的方式實(shí)現(xiàn)例:利于混合編程的方式實(shí)現(xiàn)y=a+b,主程序用主程序用C實(shí)現(xiàn),子函數(shù)實(shí)現(xiàn),子函數(shù)asmf采用匯編語言采用匯編語言,已知已知a,b,y均為整數(shù)。均為整數(shù)。 主程序:主程序:Main()int a, int b;int y;a=3; b=5;y=asmf(a,b);extern int asmf(int a,int b); 匯編源程序:匯編源程序:.global _asmf.text_asmf: add T1,T0,T0 RET習(xí)題:習(xí)題: 利于混合編程的方式實(shí)現(xiàn)利于混合編程的方式實(shí)現(xiàn) 已知主程序如下,請(qǐng)將匯編源程序補(bǔ)充完整。已知主程序如下,請(qǐng)將匯編源程序補(bǔ)充完整。40iiixayMai

17、n()int anb=2,3,4,5; int xnb=1,2,3,4;int y;y=asmf(&a,&x,nb);extern long asmf(int *,int *,int); 主程序:主程序: 匯編源程序:匯編源程序:.global _asmf.text_asmf: . . RET#define nb 5;P249 作業(yè)作業(yè) 3,4,5,6, 7,9,10小結(jié):軟件開發(fā)過程第一步,分析任務(wù)需求并用高級(jí)語言寫出軟件流程。第一步,分析任務(wù)需求并用高級(jí)語言寫出軟件流程。寫流程可以采用編寫寫流程可以采用編寫“偽代碼偽代碼”的方式完成。可以清楚地定義的方式完成??梢郧宄囟x

18、信號(hào)的處理機(jī)制,并為今后程序的調(diào)試和擴(kuò)展預(yù)先留好接口。在流信號(hào)的處理機(jī)制,并為今后程序的調(diào)試和擴(kuò)展預(yù)先留好接口。在流程描述中,可以將每一個(gè)關(guān)鍵的處理環(huán)節(jié)用函數(shù)(或直接用語言描程描述中,可以將每一個(gè)關(guān)鍵的處理環(huán)節(jié)用函數(shù)(或直接用語言描述)來表示,確定軟件的框架。述)來表示,確定軟件的框架。第二步,根據(jù)第一步的工作寫主流程的第二步,根據(jù)第一步的工作寫主流程的C或者匯編程序。或者匯編程序。整個(gè)工作過程可以充分參照例子工程做。整個(gè)工作過程可以充分參照例子工程做。第三步,細(xì)化主流程程序,按功能編寫每一個(gè)函數(shù)。第三步,細(xì)化主流程程序,按功能編寫每一個(gè)函數(shù)。第四步,完成中斷服務(wù)程序的編寫。第四步,完成中斷服

19、務(wù)程序的編寫。第五步,編寫鏈接用第五步,編寫鏈接用cmd命令文件,確定匯編程序中各命令文件,確定匯編程序中各段代碼和數(shù)據(jù)擺放的位置。段代碼和數(shù)據(jù)擺放的位置。通常情況下,程序放置在通常情況下,程序放置在SARAM內(nèi),而數(shù)據(jù)放置在內(nèi),而數(shù)據(jù)放置在DARAM 。注意程序的編制需需調(diào)程序的模塊化、常量的符號(hào)化、注意程序的編制需需調(diào)程序的模塊化、常量的符號(hào)化、變量名有意義等軟件工程的基本要素。在匯編級(jí)編程的時(shí)候,變量名有意義等軟件工程的基本要素。在匯編級(jí)編程的時(shí)候,需要做匯編語句級(jí)的優(yōu)化。需要做匯編語句級(jí)的優(yōu)化。小結(jié):軟件開發(fā)過程軟件組成:軟件組成:由代碼和數(shù)據(jù)組成由代碼和數(shù)據(jù)組成運(yùn)行:運(yùn)行:要運(yùn)行的程

20、序其代碼和數(shù)據(jù)必須存放在要運(yùn)行的程序其代碼和數(shù)據(jù)必須存放在CPU的存儲(chǔ)空間的存儲(chǔ)空間存放存放:以代碼塊和數(shù)據(jù)塊的形式存放:以代碼塊和數(shù)據(jù)塊的形式存放 代碼塊和數(shù)據(jù)塊是程序的最小單元代碼塊和數(shù)據(jù)塊是程序的最小單元 一個(gè)代碼塊或數(shù)據(jù)塊在存儲(chǔ)空間中連續(xù)、順序存放一個(gè)代碼塊或數(shù)據(jù)塊在存儲(chǔ)空間中連續(xù)、順序存放 不同的代碼塊或數(shù)據(jù)塊,可以存放于不同的存儲(chǔ)空間中不同的代碼塊或數(shù)據(jù)塊,可以存放于不同的存儲(chǔ)空間中定位:定位: 編譯時(shí)定位:編譯時(shí)定位:MCU系統(tǒng)采用編程時(shí)由系統(tǒng)采用編程時(shí)由ORG語句確定代碼塊和數(shù)據(jù)塊的語句確定代碼塊和數(shù)據(jù)塊的絕對(duì)地址編譯器以此地址為首地址,連續(xù)、順序地存放該代碼塊或數(shù)絕對(duì)地址編譯

21、器以此地址為首地址,連續(xù)、順序地存放該代碼塊或數(shù)據(jù)塊據(jù)塊 鏈接時(shí)定位:鏈接時(shí)定位:DSP系統(tǒng)采用編程時(shí)由系統(tǒng)采用編程時(shí)由“SECTION”偽指令,以區(qū)分不偽指令,以區(qū)分不同的代碼塊或數(shù)據(jù)塊編譯器每遇到一個(gè)同的代碼塊或數(shù)據(jù)塊編譯器每遇到一個(gè)“SECTION”偽指令,從偽指令,從0地址地址重新開始一個(gè)代碼塊或數(shù)據(jù)塊鏈接器將同名的重新開始一個(gè)代碼塊或數(shù)據(jù)塊鏈接器將同名的“SECTION”合并,并合并,并按按.cmd文件中的文件中的“SECTION”命令進(jìn)行實(shí)際的定位命令進(jìn)行實(shí)際的定位 加載時(shí)定位:加載時(shí)定位:PC機(jī)系統(tǒng)采用編程、編譯和鏈接時(shí)均未對(duì)程序進(jìn)行絕對(duì)機(jī)系統(tǒng)采用編程、編譯和鏈接時(shí)均未對(duì)程序進(jìn)行

22、絕對(duì)定位程序運(yùn)行前,由操作系統(tǒng)對(duì)程序進(jìn)行重定位,并加載到存儲(chǔ)空間定位程序運(yùn)行前,由操作系統(tǒng)對(duì)程序進(jìn)行重定位,并加載到存儲(chǔ)空間中中DSP C語言:C運(yùn)行環(huán)境(1)存儲(chǔ)模型:存儲(chǔ)模型:C程序的代碼和數(shù)據(jù)如何定位程序的代碼和數(shù)據(jù)如何定位系統(tǒng)定義系統(tǒng)定義.cinit存放存放C程序中的變量初值和常量程序中的變量初值和常量.const 存放存放C程序中的字符常量、浮點(diǎn)常量和用程序中的字符常量、浮點(diǎn)常量和用const聲明的常量聲明的常量.switch 存放存放C程序中程序中switch語句的跳針表語句的跳針表.text 存放存放C程序的代碼程序的代碼.bss為為C程序中的全局和靜態(tài)變量保留存儲(chǔ)空間程序中的全

23、局和靜態(tài)變量保留存儲(chǔ)空間.far 為為C程序中用程序中用far聲明的全局和靜態(tài)變量保留空間聲明的全局和靜態(tài)變量保留空間.stack 為為C程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、函數(shù)程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、函數(shù)間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果.sysmem用于用于C程序中程序中malloc、calloc和和realloc函數(shù)動(dòng)態(tài)分配存儲(chǔ)函數(shù)動(dòng)態(tài)分配存儲(chǔ)空間空間用用定義用用定義#pragmaCODE_SECTION (symbol, section name)#pragmaDATA_SECTION (symbol, sect

24、ion name)DSP C語言:C運(yùn)行環(huán)境()寄存器使用規(guī)則寄存器使用規(guī)則C編譯器如何使用編譯器如何使用DSP的寄存器的寄存器函數(shù)進(jìn)入和返回前,寄存器的保護(hù)函數(shù)進(jìn)入和返回前,寄存器的保護(hù)函數(shù)調(diào)用規(guī)則函數(shù)調(diào)用規(guī)則函數(shù)間的參數(shù)傳遞通過寄存器和系統(tǒng)堆棧進(jìn)行函數(shù)間的參數(shù)傳遞通過寄存器和系統(tǒng)堆棧進(jìn)行調(diào)用函數(shù)與被調(diào)用函數(shù)必須對(duì)各自的寄存器進(jìn)行保護(hù)調(diào)用函數(shù)與被調(diào)用函數(shù)必須對(duì)各自的寄存器進(jìn)行保護(hù)從被調(diào)用函數(shù)返回前,被調(diào)用函數(shù)必須歸還所有已占用的堆??臻g從被調(diào)用函數(shù)返回前,被調(diào)用函數(shù)必須歸還所有已占用的堆棧空間C和和ASM混合編程混合編程C和和ASM混合編程時(shí),必須遵循寄存器使用規(guī)則和函數(shù)調(diào)用規(guī)則混合編程時(shí),

25、必須遵循寄存器使用規(guī)則和函數(shù)調(diào)用規(guī)則被被C調(diào)用的調(diào)用的ASM函數(shù),其函數(shù)名前應(yīng)加函數(shù),其函數(shù)名前應(yīng)加“_”中斷服務(wù)程序中斷服務(wù)程序ASM編寫的中斷服務(wù)程序必須對(duì)所有用到寄存器進(jìn)行保護(hù),以免破編寫的中斷服務(wù)程序必須對(duì)所有用到寄存器進(jìn)行保護(hù),以免破壞壞C運(yùn)行環(huán)境運(yùn)行環(huán)境C編寫的中斷服務(wù)程序應(yīng)用編寫的中斷服務(wù)程序應(yīng)用interrupt關(guān)鍵字聲明關(guān)鍵字聲明DSP C語言:C運(yùn)行環(huán)境() 系統(tǒng)初試化系統(tǒng)初試化 在運(yùn)行在運(yùn)行C程序前,必須建立程序前,必須建立C運(yùn)行環(huán)境,此任務(wù)由運(yùn)行環(huán)境,此任務(wù)由C引導(dǎo)程引導(dǎo)程序序_c_int00完成;完成;c程序在連接的時(shí)候需要程序在連接的時(shí)候需要rst.lib庫。庫。_

26、c_int00包含在庫函數(shù)中,包含在庫函數(shù)中,build時(shí)自動(dòng)將其鏈接進(jìn)可時(shí)自動(dòng)將其鏈接進(jìn)可執(zhí)行程序中,程序的入口地址必須設(shè)為執(zhí)行程序中,程序的入口地址必須設(shè)為_c_int00起始地址。起始地址。_c_int00的源程序存放在由的源程序存放在由rts.src分離出來的分離出來的boot.asm中,用用可根據(jù)需要修改中,用用可根據(jù)需要修改 設(shè)置堆棧指針,設(shè)置堆棧指針, 初始化全局變量:將初始化全局變量:將.cinit”段段“中數(shù)據(jù)拷貝到中數(shù)據(jù)拷貝到.bss”段段“中中 調(diào)用調(diào)用C程序的主函數(shù)程序的主函數(shù)main()不同系系的不同系系的DSP,其,其C編譯器對(duì)編譯器對(duì)C運(yùn)行環(huán)境的處理略有運(yùn)行環(huán)境的

27、處理略有不同,具體參考各自的不同,具體參考各自的Optimizing C Compiler Users GuideDSP C語言:軟件build流程 目標(biāo)文件地址是浮動(dòng)的,能被重定位目標(biāo)文件地址是浮動(dòng)的,能被重定位鏈接器用鏈接器用.cmd文件對(duì)鏈接目標(biāo),進(jìn)行重定文件對(duì)鏈接目標(biāo),進(jìn)行重定位位系出目標(biāo)文件、庫文件和鏈接器選項(xiàng)系出目標(biāo)文件、庫文件和鏈接器選項(xiàng)用用MEMORY命令描述目標(biāo)系統(tǒng)存儲(chǔ)空間配命令描述目標(biāo)系統(tǒng)存儲(chǔ)空間配置置用用SECTIONS命令描述命令描述“段段”如何定位如何定位Hex轉(zhuǎn)換程序也使用轉(zhuǎn)換程序也使用.cmd文件,配置文件,配置轉(zhuǎn)換選項(xiàng)轉(zhuǎn)換選項(xiàng) CCS 軟件開發(fā)方法 傳統(tǒng)軟件開發(fā)

28、方法用用ASM或或ASM和和C混合編程,從零開始混合編程,從零開始分配存儲(chǔ)器空間分配存儲(chǔ)器空間編寫硬件件源頭文件編寫硬件件源頭文件DSP片內(nèi)部分:片內(nèi)部分:描述片內(nèi)寄存器地址描述片內(nèi)寄存器地址描述片內(nèi)寄存器控制制狀態(tài)位位描述片內(nèi)寄存器控制制狀態(tài)位位DSP板上件源頭文件板上件源頭文件描述片外外設(shè)寄存器地址描述片外外設(shè)寄存器地址描述片外外設(shè)寄存器控制制狀態(tài)位位描述片外外設(shè)寄存器控制制狀態(tài)位位編寫應(yīng)用用用的外設(shè)設(shè)動(dòng)程序編寫應(yīng)用用用的外設(shè)設(shè)動(dòng)程序片內(nèi)制片外外設(shè)初試化程序片內(nèi)制片外外設(shè)初試化程序片內(nèi)制片外外設(shè)操作程序片內(nèi)制片外外設(shè)操作程序編寫中斷向量表和中斷服務(wù)程序編寫中斷向量表和中斷服務(wù)程序編寫應(yīng)用用

29、用的算法編寫應(yīng)用用用的算法編寫主控程序順序、循環(huán)執(zhí)行編寫主控程序順序、循環(huán)執(zhí)行TI倡導(dǎo)的DSP軟件架構(gòu)TI免費(fèi)提供的基礎(chǔ)軟件 CSL庫:庫:Chip Support Library芯片支持庫芯片支持庫 定義定義DSP片內(nèi)外設(shè)件源,實(shí)現(xiàn)片內(nèi)外設(shè)基本操作片內(nèi)外設(shè)件源,實(shí)現(xiàn)片內(nèi)外設(shè)基本操作DDK:Driver Development Kit 設(shè)備設(shè)動(dòng)程序開發(fā)包設(shè)備設(shè)動(dòng)程序開發(fā)包 設(shè)計(jì)標(biāo)準(zhǔn)的設(shè)備設(shè)動(dòng)程序模型,方便開發(fā)新的設(shè)備設(shè)動(dòng)程序設(shè)計(jì)標(biāo)準(zhǔn)的設(shè)備設(shè)動(dòng)程序模型,方便開發(fā)新的設(shè)備設(shè)動(dòng)程序DSPLIB制制IMGLIB:Signal Processing Library 數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、數(shù)學(xué)運(yùn)算、矩陣運(yùn)算

30、、FFT、濾波、卷積、相關(guān)等信號(hào)處理、濾波、卷積、相關(guān)等信號(hào)處理函數(shù)函數(shù) 壓縮、分析、濾波和格式轉(zhuǎn)換等圖像制視頻處理函數(shù)壓縮、分析、濾波和格式轉(zhuǎn)換等圖像制視頻處理函數(shù)DSP/BIOS:嵌入式實(shí)時(shí)、多任務(wù)操作系統(tǒng):嵌入式實(shí)時(shí)、多任務(wù)操作系統(tǒng) 實(shí)時(shí)、多任務(wù)內(nèi)核實(shí)時(shí)、多任務(wù)內(nèi)核 實(shí)時(shí)分析實(shí)時(shí)分析Reference Frameworks:程序參考架構(gòu):程序參考架構(gòu) C程序初試骨架,通過其可以迅速創(chuàng)建特定的應(yīng)用程序程序初試骨架,通過其可以迅速創(chuàng)建特定的應(yīng)用程序XDAIS:DSP Algorithm Standard,DSP算法標(biāo)準(zhǔn)算法標(biāo)準(zhǔn) 規(guī)定一系系算法編程規(guī)則,遵循這些規(guī)則的算法,可以相互規(guī)定一系系算

31、法編程規(guī)則,遵循這些規(guī)則的算法,可以相互調(diào)用調(diào)用DSP/BIOS:功能搶先型實(shí)時(shí)、多任務(wù)操作系統(tǒng)內(nèi)核搶先型實(shí)時(shí)、多任務(wù)操作系統(tǒng)內(nèi)核基于優(yōu)先級(jí)的、搶先型實(shí)時(shí)調(diào)度程序基于優(yōu)先級(jí)的、搶先型實(shí)時(shí)調(diào)度程序支持多線程管理與調(diào)度支持多線程管理與調(diào)度支持支持4種線程類型:種線程類型:HWI、SWI、TSK、IDL支持支持3種作業(yè)間的通信方式:種作業(yè)間的通信方式:Mailboxes、Semaphores、Queues支持周期函數(shù),方便實(shí)現(xiàn)固定時(shí)間間隔的數(shù)據(jù)采集,簡化多速率系支持周期函數(shù),方便實(shí)現(xiàn)固定時(shí)間間隔的數(shù)據(jù)采集,簡化多速率系統(tǒng)的設(shè)計(jì)統(tǒng)的設(shè)計(jì)提供存儲(chǔ)器管理,實(shí)現(xiàn)動(dòng)態(tài)存儲(chǔ)器分配提供存儲(chǔ)器管理,實(shí)現(xiàn)動(dòng)態(tài)存儲(chǔ)器分

32、配實(shí)時(shí)分析模塊實(shí)時(shí)分析模塊分析信息實(shí)時(shí)獲取、傳輸和顯示,為早期的系統(tǒng)級(jí)排錯(cuò)提供幫助分析信息實(shí)時(shí)獲取、傳輸和顯示,為早期的系統(tǒng)級(jí)排錯(cuò)提供幫助DSP/BIOS模塊中內(nèi)含分析信息的實(shí)時(shí)獲取功能模塊中內(nèi)含分析信息的實(shí)時(shí)獲取功能分析信息的實(shí)時(shí)傳輸由分析信息的實(shí)時(shí)傳輸由RTDX(Real-Time Data Exchange)技術(shù))技術(shù)實(shí)現(xiàn),完成目標(biāo)實(shí)現(xiàn),完成目標(biāo)DSP與主機(jī)之間的實(shí)時(shí)通信,與主機(jī)之間的實(shí)時(shí)通信,C6000 RTDX的帶寬的帶寬為為20KByte,RTDX是在是在idle作業(yè)期間完成,所以對(duì)程序執(zhí)行速度的作業(yè)期間完成,所以對(duì)程序執(zhí)行速度的影響最小影響最小主機(jī)可以顯示:事件記錄、線程執(zhí)行順序

33、、執(zhí)行次數(shù)的最大值或平主機(jī)可以顯示:事件記錄、線程執(zhí)行順序、執(zhí)行次數(shù)的最大值或平均值和總的均值和總的CPU負(fù)載等信息負(fù)載等信息DSP/BIOS:功能 為了方便使用,為了方便使用,TI 提供一個(gè)提供一個(gè)可視化的配置工具,用于配可視化的配置工具,用于配置實(shí)際系統(tǒng)中所需的置實(shí)際系統(tǒng)中所需的DSP/BIOS模塊模塊;可以在可以在CCS集成環(huán)境中調(diào)用之集成環(huán)境中調(diào)用之DSP/BIOS是可裁剪的,只是可裁剪的,只有被應(yīng)用程序使用的模塊才有被應(yīng)用程序使用的模塊才會(huì)被鏈接到應(yīng)用程序中會(huì)被鏈接到應(yīng)用程序中DSP/BIOS開銷小:代碼大開銷?。捍a大?。盒。?K WordsCPU占用:占用:1MIPSDSP/BI

34、OS采用采用標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的API,所以不同系系,所以不同系系DSP之間的移植容易之間的移植容易DSP/BIOS集成在集成在CCS中,中,無需使用許可費(fèi)無需使用許可費(fèi)CSL 庫 什么是什么是CSL:Chip Support Library 用于配置、控制和管理用于配置、控制和管理DSP片上外設(shè)片上外設(shè) 已為已為C6000和和C5000系系系系DSP設(shè)計(jì)了各自的設(shè)計(jì)了各自的CSL庫庫 CSL庫函數(shù)大多數(shù)是用庫函數(shù)大多數(shù)是用C語言編寫的,并已對(duì)代碼的大語言編寫的,并已對(duì)代碼的大小和速度進(jìn)行了優(yōu)化小和速度進(jìn)行了優(yōu)化 CSL庫是可裁剪的庫是可裁剪的:即只有被使用的:即只有被使用的CSL模塊才會(huì)包含模塊才會(huì)

35、包含進(jìn)應(yīng)用程序中進(jìn)應(yīng)用程序中 CSL庫是可擴(kuò)展的庫是可擴(kuò)展的:每個(gè)片上外設(shè)的每個(gè)片上外設(shè)的API相互獨(dú)立,增相互獨(dú)立,增加新的加新的API,對(duì)其他片上外設(shè)沒有影響,對(duì)其他片上外設(shè)沒有影響 為什么要設(shè)計(jì)為什么要設(shè)計(jì)CSL DSP片上外設(shè)種類及其應(yīng)用日趨復(fù)雜片上外設(shè)種類及其應(yīng)用日趨復(fù)雜 提供一組標(biāo)準(zhǔn)的方法用于訪問和控制片上外設(shè)提供一組標(biāo)準(zhǔn)的方法用于訪問和控制片上外設(shè) 免除用用編寫配置和控制片上外設(shè)所必需的定義和代碼免除用用編寫配置和控制片上外設(shè)所必需的定義和代碼CSL:特點(diǎn) 片上外設(shè)編程的標(biāo)準(zhǔn)協(xié)議:片上外設(shè)編程的標(biāo)準(zhǔn)協(xié)議: 定義一組標(biāo)準(zhǔn)的定義一組標(biāo)準(zhǔn)的APIs:函數(shù)、數(shù)據(jù)類型、宏:函數(shù)、數(shù)據(jù)類型、

36、宏對(duì)硬件進(jìn)行行象,提取符號(hào)化的片上外設(shè)描對(duì)硬件進(jìn)行行象,提取符號(hào)化的片上外設(shè)描述述 定義一組宏,用于訪問和建立寄存器及其位值定義一組宏,用于訪問和建立寄存器及其位值基本的件源管理基本的件源管理 對(duì)多件源的片上外設(shè)進(jìn)行管理對(duì)多件源的片上外設(shè)進(jìn)行管理已集成到已集成到DSP/BIOS中中 通過圖形用用接口通過圖形用用接口GUI對(duì)對(duì)CSL進(jìn)行配置進(jìn)行配置使片上外設(shè)容易使用使片上外設(shè)容易使用 縮短開發(fā)時(shí)間,增加可移植性縮短開發(fā)時(shí)間,增加可移植性CSL:片上外設(shè)DDK(Driver Development Kit )TI提供提供DDK的目的的目的標(biāo)準(zhǔn)的設(shè)備設(shè)動(dòng)程序模型,用用無需從零開始編寫設(shè)備設(shè)動(dòng)程序標(biāo)準(zhǔn)

37、的設(shè)備設(shè)動(dòng)程序模型,用用無需從零開始編寫設(shè)備設(shè)動(dòng)程序設(shè)備設(shè)動(dòng)程序模型(設(shè)備設(shè)動(dòng)程序模型(IOM)將設(shè)備設(shè)動(dòng)程序分為將設(shè)備設(shè)動(dòng)程序分為2個(gè)部分個(gè)部分與設(shè)備相關(guān)的:與設(shè)備相關(guān)的:“迷你迷你”設(shè)動(dòng)程序(設(shè)動(dòng)程序(mini-driver)與設(shè)備無關(guān)的:與設(shè)備無關(guān)的:“類類”設(shè)動(dòng)程序(設(shè)動(dòng)程序(class-driver)“類類”設(shè)動(dòng)程序設(shè)動(dòng)程序設(shè)備設(shè)動(dòng)程序的上上行象,使其與特定設(shè)備無關(guān),為應(yīng)用程序提供通用的設(shè)備設(shè)動(dòng)程序的上上行象,使其與特定設(shè)備無關(guān),為應(yīng)用程序提供通用的接口接口3大類大類“類類”設(shè)動(dòng)程序:設(shè)動(dòng)程序:SIO、PIP和和GIOSIO:流:流I/O接口,由接口,由SIO和和DIO組成,組成,D

38、IO負(fù)責(zé)緩沖器管理、信號(hào)同步以負(fù)責(zé)緩沖器管理、信號(hào)同步以及底上及底上“迷你迷你”設(shè)動(dòng)程序接口設(shè)動(dòng)程序接口PIP:管道接口,有:管道接口,有PIP和和PIO組成,組成,PIO負(fù)責(zé)緩沖器管理、信號(hào)同步以及負(fù)責(zé)緩沖器管理、信號(hào)同步以及底上底上“迷你迷你”設(shè)動(dòng)程序接口設(shè)動(dòng)程序接口GIO:通用:通用I/O,允許進(jìn)行塊讀塊寫,可以用其新的用用設(shè)動(dòng)程序,允許進(jìn)行塊讀塊寫,可以用其新的用用設(shè)動(dòng)程序“迷你迷你”設(shè)動(dòng)程序設(shè)動(dòng)程序設(shè)備設(shè)動(dòng)程序的底上行象,與特定設(shè)備有關(guān),對(duì)設(shè)計(jì)硬件設(shè)備進(jìn)行操作,設(shè)備設(shè)動(dòng)程序的底上行象,與特定設(shè)備有關(guān),對(duì)設(shè)計(jì)硬件設(shè)備進(jìn)行操作,DDK規(guī)定一組規(guī)定一組標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的API,函數(shù)體由用用根據(jù)實(shí)

39、際硬件設(shè)備編寫,函數(shù)體由用用根據(jù)實(shí)際硬件設(shè)備編寫DDK是在是在CSL基礎(chǔ)上對(duì)外設(shè)基礎(chǔ)上對(duì)外設(shè)I/O進(jìn)行更高上次的行象進(jìn)行更高上次的行象TI免費(fèi)提供免費(fèi)提供DDK的源代碼、庫及相關(guān)文檔,可從的源代碼、庫及相關(guān)文檔,可從TI網(wǎng)站上免費(fèi)下載網(wǎng)站上免費(fèi)下載Signal Processing LibraryC6000系系系系DSP基本的信號(hào)處理庫基本的信號(hào)處理庫DSPLIB提供數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、提供數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、FFT、濾波、卷積等常用的信號(hào)處理函數(shù)、濾波、卷積等常用的信號(hào)處理函數(shù)TMS320C62x DSPLIB:用門為:用門為C62x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化TMS320C67x DSP

40、LIB:用門為:用門為C67x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化TMS320C64x DSPLIB:用門為:用門為C64x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化FastRTS:提供快速的單精度制雙精度浮點(diǎn)數(shù)學(xué)運(yùn)算和轉(zhuǎn)換函數(shù)提供快速的單精度制雙精度浮點(diǎn)數(shù)學(xué)運(yùn)算和轉(zhuǎn)換函數(shù)TMS320C62x制制C64x FastRTS:用門為:用門為C62x制制C64x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化TMS320C67x FastRTS:用門為:用門為C67x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化IMGLIB:提供壓縮、分析、濾波和公司轉(zhuǎn)換等常用的圖像制視頻處理:提供壓縮、分析、濾波和公司轉(zhuǎn)換等常用的圖像制視頻處理函數(shù)函數(shù)TMS320

41、C62x IMGLIB:用門為:用門為C62x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化TMS320C64x IMGLIB:用門為:用門為C64x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化C5000系系系系DSP基本的信號(hào)處理庫基本的信號(hào)處理庫DSPLIB:提供數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、:提供數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、FFT、濾波、卷積等常用的信號(hào)處理、濾波、卷積等常用的信號(hào)處理函數(shù)函數(shù)TMS320C54x DSPLIB:用門為:用門為C54x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化TMS320C55x DSPLIB:用門為:用門為C55x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化IMGLIB:提供壓縮、分析、濾波和公司轉(zhuǎn)換等常用的圖像制視頻處理:提供壓縮、分析、濾波和公司轉(zhuǎn)換等常用的圖像制視頻處理函數(shù)函數(shù)TMS320C55x IMGLIB:用門為:用門為C55x系系系系DSP進(jìn)行優(yōu)化進(jìn)行優(yōu)化Reference FrameworkTI提供軟件參考架構(gòu),目的:提供軟件參考架構(gòu),目的:DSP系統(tǒng)日趨復(fù)雜系統(tǒng)日趨復(fù)雜 包含多個(gè)算法(如:同時(shí)包含音頻算法和視頻算法)包含多個(gè)算法(如:同時(shí)包含音頻算法和視頻算法) 同一個(gè)算法可能需要多道運(yùn)行(如:對(duì)多個(gè)視頻流進(jìn)行處理)同一個(gè)算法可能需要多道運(yùn)行(如:對(duì)多個(gè)視頻流進(jìn)行處理) 不同算法或

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論