DSP原理及開發(fā)應(yīng)用課件8_第1頁
DSP原理及開發(fā)應(yīng)用課件8_第2頁
DSP原理及開發(fā)應(yīng)用課件8_第3頁
DSP原理及開發(fā)應(yīng)用課件8_第4頁
DSP原理及開發(fā)應(yīng)用課件8_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 DSP原理及開發(fā)應(yīng)用 9/8/20221第5章 TMS320C54x軟件開發(fā)5.1 軟件開發(fā)過程及開發(fā)工具5.2 公共目標(biāo)文件格式5.3 常用匯編偽指令5.4 鏈接器命令文件的編寫與使用5.5 匯編語言程序編寫方法5.6 TMS320C54x C語言編程5.7 用C語言和匯編語言混合編程9/8/202225.1 軟件開發(fā)過程及開發(fā)工具1建立源程序2C編譯器(C Compiler)3匯編器(Assembler)4連接器(Linker)5調(diào)試工具6十六進(jìn)制轉(zhuǎn)換公用程序(Hex Conversion Utility) 返回首頁9/8/20223圖5-1 TMS320C54x DSP軟件開發(fā)流程9/

2、8/20224表5-1 TMS320C54xV3.50版代碼生成工具程序返回本節(jié)9/8/20225C編譯器 C54x的C編譯器完全支持標(biāo)準(zhǔn)C,C源程序經(jīng)過C compiler編譯生成C54x的匯編源代碼,匯編源代碼經(jīng)Assembler生成一個(gè)COFF目標(biāo)文件,Linker鏈接所有的目標(biāo)文件,生成可執(zhí)行的目標(biāo)文件。 9/8/202269/8/202279/8/202285.2 公共目標(biāo)文件格式5.2.1 COFF文件的基本單元段5.2.2 匯編器對(duì)段的處理5.2.3 鏈接器對(duì)段的處理5.2.4 重新定位5.2.5 程序裝入5.2.6 COFF文件中的符號(hào) 返回首頁9/8/202295.2.1 C

3、OFF文件的基本單元段段(sections)是COFF文件中最重要的概念。一個(gè)段就是最終在存儲(chǔ)器映象中占據(jù)連續(xù)空間的一個(gè)數(shù)據(jù)或代碼塊。目標(biāo)文件中的每一個(gè)段都是相互獨(dú)立的。一般地,COFF目標(biāo)文件包含3個(gè)缺省的段:text段、data段、bss段。段可以分為兩大類,即已初始化段和未初始化段。如圖5-2所示為目標(biāo)文件中的段與目標(biāo)系統(tǒng)中存儲(chǔ)器的關(guān)系。9/8/202210圖5-2 目標(biāo)文件中的段與目標(biāo)存儲(chǔ)器的關(guān)系返回本節(jié)9/8/2022115.2.2 匯編器對(duì)段的處理1未初始化段未初始化段主要用來在存儲(chǔ)器中保留空間,通常將它們定位到RAM中。這些段在目標(biāo)文件中沒有實(shí)際內(nèi)容,只是保留空間而已。程序可以在

4、運(yùn)行時(shí)利用這些空間建立和存儲(chǔ)變量。未初始化段是通過使用.bss和.usect匯編偽指令建立的,兩條偽指令的句法分別為:.bss符號(hào),字?jǐn)?shù) 符號(hào).usect“段名”,字?jǐn)?shù)9/8/2022122已初始化段已初始化段包含可執(zhí)行代碼或已初始化數(shù)據(jù)。這些段的內(nèi)容存儲(chǔ)在目標(biāo)文件中,加載程序時(shí)再放到TMS320C54X存儲(chǔ)器中。三個(gè)用于建立初始化段的偽指令句法分別為: .text段起點(diǎn) .data段起點(diǎn) .sect“段名”,段起點(diǎn)9/8/2022133命名段命名段就是程序員自己定義的段,它與缺省的.text、.data和.bss段一樣使用,但與缺省段分開匯編。 data段不同的存儲(chǔ)器中,將未初始化的變量匯編

5、到與bss段不同的存儲(chǔ)器中。產(chǎn)生命名段的偽指令為: 符號(hào).usect“段名”,字?jǐn)?shù) .sect“段名”,段起點(diǎn)9/8/2022144子段子段(Subsections)是大段中的小段。鏈接器可以像處理段一樣處理子段。采用子段可以使存儲(chǔ)器圖更加緊密。子段的命名句法為: 基段名:子段名子段也有兩種,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。9/8/2022155段程序計(jì)數(shù)器(SPC)匯編器為每個(gè)段安排一個(gè)獨(dú)立的程序計(jì)數(shù)器,即段程序計(jì)數(shù)器(SPC)。SPC表示一個(gè)程序代碼段或數(shù)據(jù)段內(nèi)的當(dāng)前地址。開始時(shí),匯編器將每個(gè)SPC置0,當(dāng)匯編器將程序代碼或數(shù)據(jù)加到一個(gè)段內(nèi)時(shí),相應(yīng)

6、的SPC增加。如果匯編器再次遇到相同段名的段,繼續(xù)匯編至相應(yīng)的段,且相應(yīng)的SPC在先前的基礎(chǔ)上繼續(xù)增加。9/8/202216圖5-3 例5-1產(chǎn)生的目標(biāo)代碼返回本節(jié)9/8/2022175.2.3 鏈接器對(duì)段的處理鏈接器對(duì)段的處理有兩個(gè)功能。首先,它將匯編器產(chǎn)生的COFF目標(biāo)文件(.obj文件)中的各種段作為輸入段,當(dāng)有多個(gè)文件進(jìn)行鏈接時(shí),它將輸入段組合起來,在可執(zhí)行的COFF輸出模塊中建立各個(gè)輸出段。其次,鏈接器為輸出段選擇存儲(chǔ)器地址。9/8/202218鏈接器有兩個(gè)命令完成上述功能,即:MEMORY 命令定義目標(biāo)系統(tǒng)的存儲(chǔ)器配置圖,包括對(duì)存儲(chǔ)器各部分的命名,以及規(guī)定它們的起始地址和長度。SE

7、CTIONS命令告訴鏈接器如何將輸入段組合成輸出段,以及在存儲(chǔ)器何處存放輸出段。子段可以用來更精確地編排段,可用鏈接器SECTIONS命令指定子段。 9/8/202219圖5-4 鏈接器默認(rèn)的存儲(chǔ)器分配返回本節(jié)9/8/2022205.2.4 重新定位1鏈接時(shí)重新定位將各個(gè)段定位到存儲(chǔ)器中,每個(gè)段都從合適的地址開始。將符號(hào)值調(diào)整到相對(duì)于新的段地址的數(shù)值。調(diào)整對(duì)重新定位后符號(hào)的引用。9/8/2022212運(yùn)行時(shí)重新定位將代碼裝入存儲(chǔ)器的一個(gè)地方,而運(yùn)行在另一個(gè)地方。利用SECTIONS命令選項(xiàng)讓鏈接器定位兩次。一些關(guān)鍵的執(zhí)行代碼必須裝入在系統(tǒng)的ROM中,但希望在較快的RAM中運(yùn)行。鏈接器提供了一個(gè)

8、簡單的處理該問題的方法。利用SECTIONS命令選項(xiàng)讓鏈接器定位兩次。第一次使用裝入關(guān)鍵字設(shè)置裝入地址,再用運(yùn)行關(guān)鍵字設(shè)置運(yùn)行地址。返回本節(jié)9/8/2022225.2.5 程序裝入(1)硬件仿真器和CCS集成開發(fā)環(huán)境,具有內(nèi)部的裝入器,調(diào)用裝入器的LOAD命令即可裝入可執(zhí)行程序。(2)將代碼固化在片外存儲(chǔ)器中,采用Hex轉(zhuǎn)換工具(Hex conversion utility),例如Hex500將可執(zhí)行的COFF目標(biāo)模塊(.out文件)轉(zhuǎn)換成幾種其他目標(biāo)格式文件,然后將轉(zhuǎn)換后的文件用編程器將代碼寫入EPROM/Flash。 返回本節(jié)9/8/2022235.2.6 COFF文件中的符號(hào)COFF文件

9、中有一個(gè)符號(hào)表,用于存儲(chǔ)程序中的符號(hào)信息。鏈接器對(duì)符號(hào)重定位時(shí)使用該表,調(diào)試工具也使用該表來提供符號(hào)調(diào)試。外部符號(hào)指在一個(gè)模塊中定義,在另一個(gè)模塊中使用的符號(hào)??墒褂?def、.ref或.global匯編偽指令將符號(hào)定義為外部符號(hào)。.def在當(dāng)前模塊中定義,可以在別的模塊中使用的符號(hào);.ref在當(dāng)前模塊中引用,但在別的模塊中定義的符號(hào);.global可用于以上任何一種情況。返回本節(jié)9/8/2022245.3 常用匯編偽指令返回首頁9/8/202225表5-2 常用的匯編偽指令9/8/2022261段定義偽指令為便于鏈接器將程序、數(shù)據(jù)分段定位于指定的(物理存在的)存儲(chǔ)器空間,并將不同的obj文件

10、鏈接起來。段的使用非常靈活,但常用以下約定:.text 此段存放程序代碼。.data 此段存放初始化了的數(shù)據(jù)。.bss 此段存入未初始化的變量。.sect 名稱 定義一個(gè)有名段,放初始化了的數(shù)據(jù)或程序代碼。9/8/2022272條件匯編偽指令.if、.elseif、.else、.endif偽指令告訴匯編器按照表達(dá)式的計(jì)算結(jié)果對(duì)代碼塊進(jìn)行條件匯編。.if expression 標(biāo)志條件塊的開始,僅當(dāng)條件為真(expression的值非0即為真)時(shí)匯編代碼。.elseif expression 標(biāo)志若.if條件為假,而.elseif條件為真時(shí)要匯編代碼塊。.else 標(biāo)志若.if條件為假時(shí)要匯編代

11、碼塊。.endif 標(biāo)志條件塊的結(jié)束,并終止該條件代碼塊。9/8/2022283引用其他文件和初始化常數(shù)偽指令.include 文件名 將指定文件復(fù)制到當(dāng)前位置,其內(nèi)容可以是程序、數(shù)據(jù)、符號(hào)定義等。.copy 文件名 與.include類似。.def 符號(hào)名 在當(dāng)前文件中定義一個(gè)符號(hào),可以被其他文件使用。.ref 符號(hào)名 在其他文件中定義,可以在本文件中使用的符號(hào)。.global 符號(hào)名 其作用相當(dāng)于.def、.ref效果之和。9/8/202229.mmregs 定義存儲(chǔ)器映射寄存器的符號(hào)名,這樣就可以用AR0、PMST等助記符替換實(shí)際的存儲(chǔ)器地址。.float 數(shù)1,數(shù)2 指定的各浮點(diǎn)數(shù)連續(xù)

12、放置到存儲(chǔ)器中(從當(dāng)前段指針開始)。.word 數(shù)1,數(shù)2 指定的各數(shù)(十六進(jìn)制)連續(xù)放置到存儲(chǔ)器中。.space n 以位為單位,空出n位存儲(chǔ)空間。.end 程序塊結(jié)束。9/8/2022304宏定義和宏調(diào)用TMS320C54x匯編支持宏語言。如果程序中需要多次執(zhí)行某段程序,可以把這段程序定義(宏定義)為一個(gè)宏,然后在需要重復(fù)執(zhí)行這段程序的地方調(diào)用這條宏。宏定義如下:Macname .macroparameter 1,parameter n .mexit .endm 返回本節(jié)9/8/2022315.4 鏈接器命令文件的編寫與使用鏈接命令文件通過段定位控制命令,分配程序代碼、數(shù)據(jù)運(yùn)行存儲(chǔ)空間。鏈

13、接命令文件有兩個(gè)重要的指令:MEMORY和SECTIONS。 返回首頁9/8/2022325.4.1 MEMORY偽指令及其使用MEMORY偽指令就是用來指定目標(biāo)存儲(chǔ)器的模型。MEMORY指出目標(biāo)系統(tǒng)中物理上存在的存儲(chǔ)空間的范圍,即可供程序使用的存儲(chǔ)空間范圍。在默認(rèn)狀態(tài)下,PAGE0代表程序空間,PAGE1代表數(shù)據(jù)空間。 返回本節(jié)9/8/202233MEMORY偽指令的一般語法為: SECTIONS name : property ,property ,property . name : property ,property ,property . name : property ,prope

14、rty ,property . 9/8/2022345.4.2 SECTIONS偽指令及其使用SECTIONS偽指令功能如下: 說明如何將輸入段組合成輸出段。在可執(zhí)行程序中定義輸出段。指定輸出段在存儲(chǔ)器中存放的位置。允許對(duì)輸出段重新命名。9/8/202235圖5-5 例5-6中段的定位返回本節(jié)9/8/2022365.5 匯編語言程序編寫方法5.5.1 匯編語言源程序格式5.5.2 匯編語言中的常數(shù)和字符串5.5.3 匯編源程序中的符號(hào)5.5.4 匯編源程序中的表達(dá)式 返回首頁9/8/202237MEMORYPAGE 0: EPROG: origin = 0 x1400, len = 0 x2c

15、00 ;第0頁程序空間開始地址0 x1400,空間長度0 x2c00 VECT: origin = 0 x0080, len = 0 x80 ;第0頁中斷向量開始地址0 x0080,空間長度0 x80PAGE 1: REGS: origin = 0 x60, len = 0 x1c ;第1頁寄存器空間開始地址0 x60,空間長度0 x1c IDATA: origin = 0 x80, len = 0 x1380 ;第1頁數(shù)據(jù)空間開始地址0 x80,空間長度0 x1380 EDATA: origin = 0 x1400,len = 0 x8000 ;第1頁擴(kuò)展數(shù)據(jù)空間開始地址0 x1400,空間

16、長度0 x8000 EDATA1: origin = 0 x9400,len = 0 x4c00 ;第1頁擴(kuò)展數(shù)據(jù)空間開始地址0 x9400,空間長度0 x4c009/8/202238SECTIONS .vectors: VECT PAGE 0 ;中斷向量在第0頁(PAGE 0) .text: EPROG PAGE 0 ;程序代碼在第0頁(PAGE 0) .cinit: EPROG PAGE 0 ;初始化變量在第0頁(PAGE 0) .pinit: EPROG PAGE 0 ;初始化參數(shù)在第0頁(PAGE 0) .bss: IDATA PAGE 1 ;非初始化變量在第1頁(PAGE1) .fa

17、r: IDATA PAGE 1 ;長調(diào)函數(shù)在第1頁(PAGE1) .const: IDATA PAGE1 ;常數(shù)在第1頁(PAGE1) .switch: IDATA PAGE 1 ;數(shù)據(jù)交換空間在第1頁(PAGE1) .sysmem: IDATA PAGE 1 ; .cio: IDATA PAGE 1 ;c語言輸入/輸出調(diào)用在第1頁(PAGE1) .stack: IDATA PAGE 1 ;堆棧在第1頁(PAGE1) .csldata: IDATA PAGE 1 ;c語言宏調(diào)用在第1頁(PAGE1)9/8/2022395.5 匯編語言程序編寫方法5.5.1 匯編語言源程序格式5.5.2 匯編語

18、言中的常數(shù)和字符串5.5.3 匯編源程序中的符號(hào)5.5.4 匯編源程序中的表達(dá)式 9/8/2022405.5.1 匯編語言源程序格式助記符指令一般包含4個(gè)部分,其一般組成形式為:標(biāo)號(hào): 助記符 操作數(shù) ;注釋1標(biāo)號(hào)區(qū)所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有標(biāo)號(hào),標(biāo)號(hào)可以長達(dá)32個(gè)字符,由AZ、az、09、_、和$符號(hào)組成,且第一個(gè)字符不能是數(shù)字,區(qū)分大小寫。 9/8/2022412助記符區(qū)助記符區(qū)不能從第一列開始,否則被認(rèn)為是標(biāo)號(hào)。3操作數(shù)區(qū)操作數(shù)區(qū)是一個(gè)操作數(shù)列表,可以是常數(shù)、符號(hào)或常數(shù)與符號(hào)構(gòu)成的表達(dá)式。操作數(shù)間需用“,”號(hào)隔開。4注釋區(qū)注釋區(qū)可以從任何一列開始,可以包含ASCII字符

19、和空格。 返回本節(jié)9/8/2022425.5.2 匯編語言中的常數(shù)和字符串表5-3 COFF常數(shù)與字符串返回本節(jié)9/8/2022435.5.3 匯編源程序中的符號(hào)1標(biāo)號(hào)2局部標(biāo)號(hào)3符號(hào)常數(shù)4先定義的符號(hào)常數(shù)5替代符號(hào)9/8/202244表5-4 可以用在表達(dá)式中的運(yùn)算符9/8/202245表5-5 帶有絕對(duì)符號(hào)、可重定位符號(hào)的表達(dá)式返回本節(jié)9/8/2022465.5.4 匯編源程序中的表達(dá)式表達(dá)式可以是常數(shù)、符號(hào)或由算術(shù)運(yùn)算符結(jié)合的常數(shù)和符號(hào)。表達(dá)式值的有效范圍為-3276832767。1運(yùn)算符(表5-4 所示)2合格的表達(dá)式(表5-5所示 )返回本節(jié)9/8/2022475.6 TMS320C

20、54x C語言編程5.6.1 存儲(chǔ)器模式5.6.2 寄存器規(guī)則5.6.3 函數(shù)調(diào)用規(guī)則5.6.4 中斷處理5.6.5 表達(dá)式分析 返回首頁9/8/2022485.6.1 存儲(chǔ)器模式1段C54x將存儲(chǔ)器處理為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)線性塊。程序存儲(chǔ)器包含可執(zhí)行代碼;數(shù)據(jù)存儲(chǔ)器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接器將代碼和數(shù)據(jù)定位進(jìn)合適的存儲(chǔ)空間。C編譯器對(duì)C語言編譯后除了生成3個(gè)基本段,即.text、.data、.bss外,還生成.cinit、.const、.stack、.sysmem段。9/8/2022492C/C+系統(tǒng)堆棧.stack不同于DSP

21、匯編指令定義的堆棧。DSP匯編程序中要將堆棧指針SP指向一塊RAM,用于保存中斷、調(diào)用時(shí)的返回地址,存放PUSH指令的壓棧內(nèi)容。.stack定義的系統(tǒng)堆棧實(shí)現(xiàn)的功能是保護(hù)函數(shù)的返回地址,分配局部變量,在調(diào)用函數(shù)時(shí)用于傳遞參數(shù),保護(hù)臨時(shí)結(jié)果。.stack定義的段大小(堆棧大?。┛捎面溄悠鬟x項(xiàng)-stack size設(shè)定,鏈接器還產(chǎn)生一個(gè)全局符號(hào)_ _STACK_SIZE,并賦給它等于堆棧長度的值,以字為單位,缺省值為1K。9/8/2022503存儲(chǔ)器分配(1)運(yùn)行時(shí)間支持函數(shù)。 (2)動(dòng)態(tài)存儲(chǔ)器分配。 (3)靜態(tài)和全局變量的存儲(chǔ)器分配。(4)位域/結(jié)構(gòu)的對(duì)準(zhǔn)。 返回本節(jié)9/8/2022515.6.

22、2 寄存器規(guī)則寄存器規(guī)則明確了編譯器如何使用寄存器以及在函數(shù)調(diào)用過程中如何保護(hù)寄存器。(1)輔助寄存器 (2)堆棧指針SP (3)ARP (4)在默認(rèn)情況下,編譯器總是假定ST1中的OVM在硬件復(fù)位時(shí)被清0。若在匯編代碼中對(duì)OVM置位為1,返回到C環(huán)境時(shí)必須復(fù)位。(5)寄存器變量 返回本節(jié)9/8/2022525.6.3 函數(shù)調(diào)用規(guī)則(1)局部幀的產(chǎn)生 (2)參數(shù)傳遞 (3)函數(shù)的返回 返回本節(jié)9/8/2022535.6.4 中斷處理(1)中斷的使能和屏蔽必須由程序員自己來設(shè)置。 (2)中斷程序沒有參數(shù)傳遞,即使說明,也會(huì)被忽略(3)中斷處理程序不能被正常的C程序調(diào)用。(4)為了使中斷程序與中斷

23、一致,在相應(yīng)的中斷矢量中必須放置一條轉(zhuǎn)移指令,可以用.sect匯編偽指令建立一個(gè)簡單的跳轉(zhuǎn)指令表來完成此項(xiàng)功能。9/8/202254(5)在匯編語言中,注意在符號(hào)名前面加上一個(gè)下劃線,例如c_int00記為_ c_int00。(6)中斷程序使用的所有寄存器,包括狀態(tài)寄存器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保護(hù)。(7)TMS320C54x C編譯器將C語言進(jìn)行了擴(kuò)展,中斷可以利用interrupt關(guān)鍵字由C/C+函數(shù)直接處理。返回本節(jié)9/8/2022555.6.5 表達(dá)式分析當(dāng)C程序中需要計(jì)算整型表達(dá)式時(shí),必須注意以下幾點(diǎn):(1)算術(shù)上溢和下溢。 (2)整除和取模。 (3)C代碼對(duì)16位乘法

24、結(jié)果高16位的訪問。 返回本節(jié)9/8/202256關(guān)鍵詞 (1)constconst關(guān)鍵詞定義常量,用于限定變量或數(shù)組數(shù)值不變。如果一個(gè)變量或數(shù)組定義為const,這個(gè)變量或數(shù)組的存儲(chǔ)空間將分配到const段。利用const關(guān)鍵詞,可以將大常數(shù)表分配到系統(tǒng)ROM中。例如:const int digits = 0,1,2,3,4,5,6,7,8,9;定義整型數(shù)組int digits 為一個(gè)常數(shù)表。9/8/202257關(guān)鍵詞(2)ioportioport關(guān)鍵詞定義I/O端口,用于訪問C54x的I/O空間,其格式如下:ioport type porthex_num其中:ioport是關(guān)鍵詞,指出這是

25、一個(gè)I/O端口變量。 type只能是char、short、int或unsigned這幾種數(shù)據(jù)類型。 porthex_num是端口變量,hex_num是一個(gè)16進(jìn)制數(shù),表示I/O空間的地址。9/8/202258(3)interruptinterrupt關(guān)鍵詞定義中斷服務(wù)函數(shù),用于指定一個(gè)函數(shù)為中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)要求特殊的寄存器保護(hù)和返回順序。當(dāng)用interrupt關(guān)鍵字指定一個(gè)函數(shù)后,編譯器會(huì)按照中斷服務(wù)函數(shù)的特殊要求處理寄存器保護(hù)和返回順序。 9/8/202259(4)near和farnear和far關(guān)鍵詞定義函數(shù)調(diào)用方式,用于指定一個(gè)函數(shù)如何被調(diào)用。 near關(guān)鍵詞指定一個(gè)函數(shù),編譯

26、器會(huì)用CALL指令來調(diào)用該函數(shù)。 far關(guān)鍵詞指定一個(gè)函數(shù),編譯器會(huì)用FCALL指令來調(diào)用該函數(shù)。9/8/202260芯片支持庫(CSL) C54x系列CSL(Chip Support Library)是一組C語言可調(diào)用的函數(shù)、宏和符號(hào),用于配置和控制DSP的片上外設(shè)。CSL具有如下的優(yōu)點(diǎn): 為各種片上外設(shè)編程提供一套標(biāo)準(zhǔn)協(xié)議。 通過open和close函數(shù),進(jìn)行基本的資源管理。 用符號(hào)對(duì)片上外設(shè)的寄存器和寄存器位進(jìn)行描述,可讀性強(qiáng)。便于代碼在不同型號(hào)DSP之間移植。 便于代碼在不同型號(hào)DSP之間移植。 9/8/202261CSL由一組模塊組成,每個(gè)模塊對(duì)應(yīng)一個(gè)片上外設(shè),所有模塊都封裝在一個(gè).lib文件里(C5402對(duì)應(yīng)csl5402.lib,Device Support Symbol為CHIP_5402)。CSL的每個(gè)模塊對(duì)應(yīng)一個(gè).h文件,在程序文件中將.h文件包含,就可以調(diào)用對(duì)應(yīng)模塊的API函數(shù)了。 9/8/202262 用C語言和匯編語言混合編程在進(jìn)行一些大計(jì)算量編程的時(shí)候,C代碼的效率往往不如匯編代碼的效率,但是完全用匯編語言編程幾乎是不可能的。比較合適的方法是在對(duì)代碼效率要求不高的地方用C語言編程,在對(duì)代碼效率要求嚴(yán)格的地方用匯編語言編程。一般來講,是在C語言的架構(gòu)下嵌套匯編算法程序。有四種方法實(shí)現(xià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)論