DSP原理與應(yīng)用-DSP系統(tǒng)開發(fā)-課件_第1頁
DSP原理與應(yīng)用-DSP系統(tǒng)開發(fā)-課件_第2頁
DSP原理與應(yīng)用-DSP系統(tǒng)開發(fā)-課件_第3頁
DSP原理與應(yīng)用-DSP系統(tǒng)開發(fā)-課件_第4頁
DSP原理與應(yīng)用-DSP系統(tǒng)開發(fā)-課件_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

DSP原理與應(yīng)用

TheTechnology&ApplicationsofDSPsDSP原理與應(yīng)用

TheTechnology&Appl第二章:DSP系統(tǒng)開發(fā)第2.1節(jié)概述第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)第2.3節(jié)DSPC語言程序設(shè)計(jì)第2.4節(jié)DSPC與匯編混合編程第2.5節(jié)DSP程序燒寫習(xí)題第二章:DSP系統(tǒng)開發(fā)第2.1節(jié)概述第2.1節(jié)概述匯編語言:開發(fā)的效率高,程序執(zhí)行速度快,而且可以合理利用芯片的硬件資源開發(fā)難度較大,開發(fā)周期長(zhǎng),可讀性和可移植性差。C語言開發(fā):具有兼容性和可移植的優(yōu)點(diǎn),有利于縮短開發(fā)周期和減少開發(fā)難度在運(yùn)算量較大的情況下,C代碼的效率還是無法和手工編寫的匯編代碼的效率相比,比如FFT運(yùn)算,C和匯編的混合編程則可以充分利用前兩者的優(yōu)點(diǎn),以達(dá)到最佳利用DSP資源的目的。C和匯編語言混合編程必須遵循相關(guān)函數(shù)調(diào)用規(guī)則和寄存器調(diào)用規(guī)則,否則會(huì)帶來意想不到的問題。第2.1節(jié)概述匯編語言:第2.1節(jié)概述CCS開發(fā)實(shí)例演示第2.1節(jié)概述CCS開發(fā)實(shí)例演示第二章:DSP系統(tǒng)開發(fā)第2.1節(jié)概述第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)第2.3節(jié)DSPC語言程序設(shè)計(jì)第2.4節(jié)DSPC與匯編混合編程第2.5節(jié)DSP程序燒寫習(xí)題第二章:DSP系統(tǒng)開發(fā)第2.1節(jié)概述第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)匯編語言:累加,算術(shù)計(jì)算和邏輯運(yùn)算輔助寄存器和數(shù)據(jù)頁操作TREG,PREG和乘法指令直接內(nèi)存訪問指令(DMA)和IO操作指令程序空間訪問指令跳轉(zhuǎn)指令、寄存器操作指令浮點(diǎn)運(yùn)算指令匯編程序設(shè)計(jì):生成可執(zhí)行代碼過程示例文件第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)匯編語言:第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.1累加,算術(shù)計(jì)算和邏輯運(yùn)算第2.2.2輔助寄存器和數(shù)據(jù)頁操作第2.2.2輔助寄存器和數(shù)據(jù)頁操作第2.2.2輔助寄存器和數(shù)據(jù)頁操作第2.2.2輔助寄存器和數(shù)據(jù)頁操作第2.2.3TREG,PREG和乘法指令第2.2.3TREG,PREG和乘法指令第2.2.3TREG,PREG和乘法指令第2.2.3TREG,PREG和乘法指令第2.2.3TREG,PREG和乘法指令第2.2.3TREG,PREG和乘法指令第2.2.4直接內(nèi)存訪問(DMA)和IO操作指令第2.2.4直接內(nèi)存訪問(DMA)和IO操作指令第2.2.5程序空間訪問指令第2.2.5程序空間訪問指令第2.2.6跳轉(zhuǎn)指令第2.2.6跳轉(zhuǎn)指令第2.2.7寄存器操作指令第2.2.7寄存器操作指令第2.2.7寄存器操作指令第2.2.7寄存器操作指令第2.2.7寄存器操作指令第2.2.7寄存器操作指令第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)單精度浮點(diǎn)數(shù):1位符號(hào)位,8位指數(shù),23位有效數(shù)IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic單精度浮點(diǎn)數(shù)范圍:±3.4028235*1038在此范圍內(nèi)也無法精確表述所有浮點(diǎn)數(shù)

精度:1.19209290*10-38可精確表述的數(shù)必須可以用2的指數(shù)冪次組合描述第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)IEE第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)單精度浮點(diǎn)數(shù):1位符號(hào)位,8位指數(shù),23位有效數(shù)IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic例:0011111101100110011001100110011016進(jìn)制為:0X3F666666整形數(shù)為1063675494單精度下:符號(hào)位0(+)

指數(shù)位E(01111110)2=126,e=-1尾數(shù)1100110011001100110011021.799999952316284179687510

實(shí)際值0.89999997615814208984375

第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)IEE第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)單精度浮點(diǎn)數(shù):1位符號(hào)位,8位指數(shù),23位有效數(shù)IEEE754-IEEEStandard754forBinaryFloatingPointArithmetic單精度運(yùn)算精度:加、減、乘、除、平方根、余數(shù)、將浮點(diǎn)格式的數(shù)舍入為整數(shù)值、在不同浮點(diǎn)格式之間轉(zhuǎn)換、在浮點(diǎn)和整數(shù)格式之間轉(zhuǎn)換以及比較。四種舍入方向:向最近數(shù)方向,向負(fù)無窮大,向正無窮大以及向0。五種類型的浮點(diǎn)異常是:無效運(yùn)算、被零除、上溢、下溢和不精確。*常犯錯(cuò)誤:f==0,應(yīng)該為-e<f<e。第2.2.8浮點(diǎn)運(yùn)算指令浮點(diǎn)數(shù)簡(jiǎn)介(IEEE754)IEE第2.2.8浮點(diǎn)運(yùn)算指令8個(gè)浮點(diǎn)結(jié)果寄存器(RnH)浮點(diǎn)狀態(tài)寄存器(STF)重復(fù)塊寄存器TMS320C28xFloatingPointUnitandInstructionSetReferenceGuide第2.2.8浮點(diǎn)運(yùn)算指令8個(gè)浮點(diǎn)結(jié)果寄存器(RnH)TMS第2.2.8浮點(diǎn)運(yùn)算指令算術(shù)運(yùn)算ABSF32:32位浮點(diǎn)數(shù)絕對(duì)值運(yùn)算ADDF32:32位浮點(diǎn)數(shù)加法運(yùn)算SUBF32:32位浮點(diǎn)數(shù)減法運(yùn)算MPYF32:32位浮點(diǎn)數(shù)乘法運(yùn)算,MACF32:32位浮點(diǎn)數(shù)乘加運(yùn)算EINVF32:32位浮點(diǎn)數(shù)倒數(shù)運(yùn)算(1/X)EISQRTF32:32位浮點(diǎn)數(shù)開方倒數(shù)運(yùn)算(1/sqrt(x))NEGF32:32位浮點(diǎn)數(shù)取反CMPF32,MAXF32,MINF32:32位浮點(diǎn)數(shù)比較、最大、最小值第2.2.8浮點(diǎn)運(yùn)算指令算術(shù)運(yùn)算第2.2.8浮點(diǎn)運(yùn)算指令整數(shù)浮點(diǎn)數(shù)轉(zhuǎn)換F32TOI16,F32TOI16R:32位浮點(diǎn)數(shù)轉(zhuǎn)為16位整數(shù)F32TOI32:32位浮點(diǎn)數(shù)轉(zhuǎn)為32位整數(shù)F32TOUI16,F32TOUI16R:32位浮點(diǎn)數(shù)轉(zhuǎn)為16位無符號(hào)整數(shù)F32TOUI32:32位浮點(diǎn)數(shù)轉(zhuǎn)為32位無符號(hào)數(shù)整數(shù)I16TOF32:16位整數(shù)轉(zhuǎn)為32位浮點(diǎn)數(shù)I32TOF32:32位整數(shù)轉(zhuǎn)為32位浮點(diǎn)數(shù)UI16TOF32:16位無符號(hào)整數(shù)轉(zhuǎn)為32位浮點(diǎn)數(shù)UI32TOF32:32位無符號(hào)整數(shù)轉(zhuǎn)為32位浮點(diǎn)數(shù)第2.2.8浮點(diǎn)運(yùn)算指令整數(shù)浮點(diǎn)數(shù)轉(zhuǎn)換第2.2.8浮點(diǎn)運(yùn)算指令寄存器操作MOV16:16位浮點(diǎn)數(shù)內(nèi)存操作MOV32:32位浮點(diǎn)數(shù)內(nèi)存操作MOVD32:32位浮點(diǎn)數(shù)內(nèi)存操作及復(fù)制MOVF32:32位浮點(diǎn)數(shù)立即數(shù)內(nèi)存操作MOVI32:32位浮點(diǎn)數(shù)立即數(shù)(16進(jìn)制)內(nèi)存操作MOVIZ32.MOVIZF32:浮點(diǎn)寄存器高16位操作MOVXI:浮點(diǎn)寄存器低16位操作MOVST0:STF內(nèi)容放至ST0第2.2.8浮點(diǎn)運(yùn)算指令寄存器操作第2.2.8浮點(diǎn)運(yùn)算指令寄存器操作TESTTF:測(cè)試STF中標(biāo)志位SETFLAG:STF中標(biāo)志位置位SAVEFLAG:保存STF寄存器內(nèi)容ZERO,ZEROA:浮點(diǎn)寄存器清零SWAPF:浮點(diǎn)寄存器內(nèi)容交換PUSH:壓棧POP:出棧RESTORE:恢復(fù)RPTB:重復(fù)執(zhí)行第2.2.8浮點(diǎn)運(yùn)算指令寄存器操作第2.2.9匯編程序設(shè)計(jì)-生成可執(zhí)行代碼第2.2.9匯編程序設(shè)計(jì)-生成可執(zhí)行代碼第2.2.9匯編程序設(shè)計(jì)-示例文件.cmd文件:鏈接控制文件,用于定義目標(biāo)的程序,數(shù)據(jù),I/O存儲(chǔ)映射.MEMEORY{PAGE0:/*ProgramMemory*/ZONE0:origin=0x004000,length=0x001000/*XINTFzone0*/RAML0:origin=0x008000,length=0x001000/*on-chipRAMblockL0*/RAML1:origin=0x009000,length=0x001000/*on-chipRAMblockL1*/RAML2:origin=0x00A000,length=0x001000/*on-chipRAMblockL2*/RAML3:origin=0x00B000,length=0x001000/*on-chipRAMblockL3*/ZONE6A:origin=0x100000,length=0x00FC00/*XINTFzone6-programspace*/ZONE7:origin=0x200000,length=0x100000/*XINTFzone7*/FLASHH:origin=0x300000,length=0x008000/*on-chipFLASH*/……}第2.2.9匯編程序設(shè)計(jì)-示例文件.cmd文件:鏈接控制文第2.2.9匯編程序設(shè)計(jì)-示例文件.cmd文件:鏈接控制文件,用于定義目標(biāo)的程序,數(shù)據(jù),I/O存儲(chǔ)映射.SECTIONS{/*Allocateprogramareas:*/.cinit:>FLASHAPAGE=0.pinit:>FLASHA,PAGE=0.text:>FLASHAPAGE=0codestart:>BEGINPAGE=0ramfuncs:LOAD=FLASHD,RUN=RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE=0csmpasswds:>CSM_PWLPAGE=0csm_rsvd:>CSM_RSVDPAGE=0

/*Allocateuninitalizeddatasections:*/.stack:>RAMM1PAGE=1.ebss:>RAML4PAGE=1.esysmem:>RAMM1PAGE=1……}第2.2.9匯編程序設(shè)計(jì)-示例文件.cmd文件:鏈接控制文第2.2.9匯編程序設(shè)計(jì)-示例文件.h文件:標(biāo)號(hào),地址,中斷向量等定義;Filename:280x.hIMR .set0004h;InterruptMaskRegisterIFR .set0006h;InterruptFlagRegister;SystemconfigurationandinterruptregistersSCSR1 .set7018h;SystemControl&Statusregister.1SCSR2 .set7019h;SystemControl&Statusregister.2DINR .set701Ch;DeviceIdentificationNumberregister.PIVR .set701Eh;PeripheralInterruptVectorregister.PIRQR0 .set7010h;PeripheralInterruptRequestregister0PIRQR1 .set7011h;PeripheralInterruptRequestregister1PIRQR2 .set7012h;PeripheralInterruptRequestregister2PIACKR0 .set7014h;PeripheralInterruptAcknowledgeregister0PIACKR1 .set7015h;PeripheralInterruptAcknowledgeregister1PIACKR2 .set7016h;PeripheralInterruptAcknowledgeregister2;Filename:vector.h.sect "vectors"RSVECT BSTART;ResetVectorINT1 BGISR1;InterruptLevel1INT2 BGISR2;InterruptLevel2INT3 BGISR3;InterruptLevel3INT4 BGISR4;InterruptLevel4INT5 BGISR5;InterruptLevel5INT6 BGISR6;InterruptLevel6RESERVEDBPHANTOM;ReservedSW_INT8BPHANTOM;SoftwareInterruptSW_INT9BPHANTOM;SoftwareInterruptSW_INT10BPHANTOM;SoftwareInterruptSW_INT11BPHANTOM;SoftwareInterruptSW_INT12BPHANTOM;SoftwareInterruptSW_INT13BPHANTOM;SoftwareInterruptSW_INT14BPHANTOM;SoftwareInterruptSW_INT15BPHANTOM;SoftwareInterruptSW_INT16BPHANTOM;SoftwareInterruptTRAPBPHANTOM;TrapvectorNMIBNMI;Non–maskableInterruptEMU_TRAPBPHANTOM;EmulatorTrapSW_INT20BPHANTOM;SoftwareInterruptSW_INT21BPHANTOM;SoftwareInterruptSW_INT22BPHANTOM;SoftwareInterruptSW_INT23BPHANTOM;SoftwareInterruptSW_INT24BPHANTOM;SoftwareInterrupt第2.2.9匯編程序設(shè)計(jì)-示例文件.h文件:標(biāo)號(hào),地址,中第2.2.9匯編程序設(shè)計(jì)-示例文件.asm文件:程序文件*FileName:SPI.asm.include280xA.h.includevector.h.bssGPR0,1;Generalpurposeregisters..bssGPR3,1KICK_DOG.macro;Watchdogresetmacro LDP#00E0h SPLK#05555h,WDKEY SPLK#0AAAAh,WDKEY LDP#0h .endm;MAINCODE–startshere.textSTART: LDP#0 SETCINTM SPLK#0h,GPR3 OUTGPR3,WSGR CLRCSXM CLRCOVM CLRCCNF LDP#WDCR>>7 SPLK#006Fh,WDCR KICK_DOG LDP#SCSR1>>7 SPLK#0020h,SCSR1第2.2.9匯編程序設(shè)計(jì)-示例文件.asm文件:程序文件第二章:DSP程序設(shè)計(jì)第2.1節(jié)概述第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)第2.3節(jié)DSPC語言程序設(shè)計(jì)第2.4節(jié)DSPC與匯編混合編程第2.5節(jié)DSP程序燒寫習(xí)題第二章:DSP程序設(shè)計(jì)第2.1節(jié)概述第2.3節(jié)DSPC語言程序設(shè)計(jì)支持ANSIC:提供相應(yīng)的編譯器和優(yōu)化工具對(duì)ANSIC進(jìn)行了限定和擴(kuò)展運(yùn)行庫(kù):字符串操作動(dòng)態(tài)地址分配數(shù)據(jù)轉(zhuǎn)換…第2.3節(jié)DSPC語言程序設(shè)計(jì)支持ANSIC:第2.3節(jié)DSPC語言程序設(shè)計(jì)變量和標(biāo)識(shí):變量和標(biāo)識(shí)符長(zhǎng)度100個(gè)字符,區(qū)分大小寫變量和標(biāo)識(shí)符的符號(hào)集為ASCII,不支持多字節(jié)符號(hào)(如漢字)。字符或字符串常量中的16進(jìn)制ESC碼(特殊字符,如0X07)可能會(huì)有32位的值。多字符的字符變量最后一個(gè)有效,如‘a(chǎn)bc’是‘c’數(shù)據(jù)類型:Size_t(sizeof的結(jié)果)定義為unsignedintPtrdiff_t(指針加減結(jié)果)定義為int所有的整數(shù)類型(char,short,int,以及這些類型的無符號(hào)型)都是相同類型,并代表16位的二進(jìn)制值.Long和unsignedlong代表32位二進(jìn)制值.第2.3節(jié)DSPC語言程序設(shè)計(jì)變量和標(biāo)識(shí):第2.3節(jié)DSPC語言程序設(shè)計(jì)數(shù)據(jù)類型:有符號(hào)數(shù)是用二進(jìn)制補(bǔ)碼表示.數(shù)據(jù)單元的基礎(chǔ)是字(16位),BYTE和WORD一樣char是有符號(hào)類型,等同于int枚舉型(enum)用16位值表示,等同于int浮點(diǎn)類型(float,double)是相同的,遵循TMS320C2x/C2xx/C5x的32位浮點(diǎn)類型.Long和float的數(shù)據(jù)存儲(chǔ)格式為低有效字存儲(chǔ)在低地址的方式.Longlong和longdouble是64位的.第2.3節(jié)DSPC語言程序設(shè)計(jì)數(shù)據(jù)類型:第2.3節(jié)DSPC語言程序設(shè)計(jì)數(shù)據(jù)類型:第2.3節(jié)DSPC語言程序設(shè)計(jì)數(shù)據(jù)類型:第2.3節(jié)DSPC語言程序設(shè)計(jì)類型轉(zhuǎn)換:浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù)為取整截?cái)嘀羔橆愋?pointer)和int可以自由轉(zhuǎn)換farpointer為22位有效位表達(dá)式:有符號(hào)整數(shù)相除,商符號(hào)由兩個(gè)數(shù)共同決定,余數(shù)符號(hào)同被除數(shù)10/-3=-3,余1;-10/3=-3余-1有符號(hào)數(shù)右移為算術(shù)右移,符號(hào)位不變第2.3節(jié)DSPC語言程序設(shè)計(jì)類型轉(zhuǎn)換:第2.3節(jié)DSPC語言程序設(shè)計(jì)C訪問16位乘法結(jié)果的高16位:intm1,m2;intresult;result=((long)m1*(long)m2)>>16;浮點(diǎn)數(shù):32bitsFPU+,-,×,÷比較(>,<,>=,<=,==,!=)同int,long的相互轉(zhuǎn)換以上操作均通過相應(yīng)的匯編指令(即內(nèi)部硬件機(jī)制)實(shí)現(xiàn)。(無FPU時(shí)處理浮點(diǎn)運(yùn)算需要通過浮點(diǎn)數(shù)運(yùn)算庫(kù),運(yùn)算效率低)第2.3節(jié)DSPC語言程序設(shè)計(jì)C訪問16位乘法結(jié)果的高1第2.3節(jié)DSPC語言程序設(shè)計(jì)直接訪問寄存器通過cregister語句實(shí)現(xiàn): externcregistervolatileunsignedintIFR; IFR=0;第2.3節(jié)DSPC語言程序設(shè)計(jì)直接訪問寄存器第2.3節(jié)DSPC語言程序設(shè)計(jì)預(yù)處理:預(yù)處理忽略所有不支持的#pragma指令支持如下#pragma:.CODE_ALIGN·CODE_SECTION·DATA_ALIGN·DATA_SECTION·FAST_FUNC_CALL·FUNC_EXT_CALLED·INTERRUPT·MUST_INTERATE·UNROLL預(yù)處理必須在函數(shù)外,在所有聲明之前第2.3節(jié)DSPC語言程序設(shè)計(jì)預(yù)處理:第2.3節(jié)DSPC語言程序設(shè)計(jì)CODE_ALIGN:為某一段程序指定特定的代碼存儲(chǔ)邊界,以保證某函數(shù)代碼存于特定位置。#pragmaCODE_ALIGN(func,constant)#pragmaCODE_ALIGN(constant)Constant必須是2的冪次,以保證內(nèi)存邊界問題第2.3節(jié)DSPC語言程序設(shè)計(jì)CODE_ALIGN:第2.3節(jié)DSPC語言程序設(shè)計(jì)CODE_SECTION:為某一段程序指定特定的代碼存儲(chǔ)段,以便單獨(dú)分配存儲(chǔ)空間#pragmaCODE_SECTION(symbol,“section_name”)#pragmaCODE_SECTION(“section_name”)例:#pragmaCODE_SECTION(fn,“my_sect”) intfn(intx) { return0; }匯編結(jié)果:.file“CODEN.c”.sect”my_sect”.global_fn.sym_fn,_fn,36,2,0.func3第2.3節(jié)DSPC語言程序設(shè)計(jì)CODE_SECTION:第2.3節(jié)DSPC語言程序設(shè)計(jì)DATA_ALIGN:為某一段數(shù)據(jù)指定特定的代碼存儲(chǔ)邊界,以保證特定數(shù)據(jù)存于特定位置。#pragmaDATA_ALIGN(symbol,constant)#pragmaDATA_ALIGN(constant)Constant必須是2的冪次,以保證內(nèi)存邊界問題第2.3節(jié)DSPC語言程序設(shè)計(jì)DATA_ALIGN:第2.3節(jié)DSPC語言程序設(shè)計(jì)DATA_SECTION:為某一段數(shù)據(jù)指定特定的數(shù)據(jù)存儲(chǔ)段,以便單獨(dú)分配存儲(chǔ)空間,例如同.bss內(nèi)存分開,或單獨(dú)分配連續(xù)的存儲(chǔ)空間#pragmaDATA_SECTION(symbol,“section_name”)例:#pragmaDATA_SECTION(bufferB,“BufferB_sect”) charbufferA[512]; charbufferB[512];匯編結(jié)果:

.global_bufferA .bss_bufferA,512,4 .global_bufferB_bufferB: .usect“BufferB_sect”,512,4第2.3節(jié)DSPC語言程序設(shè)計(jì)DATA_SECTION:第2.3節(jié)DSPC語言程序設(shè)計(jì)SECTIONS{ VECTORS:{}>PM PAGE0 .TEXT:{}>PM PAGE0 .BSS:{}>BLK_B2 PAGE1 .DATA:{}>BLK_B1 PAGE1BufferB_sect:{}>SARAM_DPAGE1}第2.3節(jié)DSPC語言程序設(shè)計(jì)SECTIONS第2.3節(jié)DSPC語言程序設(shè)計(jì)FAST_FUNC_CALL:指明某一函數(shù)調(diào)用時(shí)采用快速函數(shù)調(diào)用(FFC)機(jī)制,而不是使用普通函數(shù)調(diào)用流程: FFC進(jìn)棧出棧及函數(shù)返回有所不同,調(diào)用更快速。 #pragmaFAST_FUNC_CALL(func)

這類函數(shù)返回時(shí)的asm代碼必須是: LB*XAR7第2.3節(jié)DSPC語言程序設(shè)計(jì)FAST_FUNC_CAL第2.3節(jié)DSPC語言程序設(shè)計(jì)FUNC_EXT_CALLED:指明某一未使用的函數(shù),使其不會(huì)在C優(yōu)化時(shí)被刪除。 #pragmaFUNC_EXT_CALLED(func)第2.3節(jié)DSPC語言程序設(shè)計(jì)FUNC_EXT_CALL第2.3節(jié)DSPC語言程序設(shè)計(jì)INTERRUPT:指明函數(shù)為中斷處理函數(shù)(函數(shù)返回機(jī)制使用IRP)#pragmaINTERRUPT(func);#pragmaINTERRUPT;#pragmaINTERRUPT(func,{HPI|LPI});#pragmaINTERRUPT({HPI|LPI});)FPU有高優(yōu)先級(jí)中斷(HPI)和低優(yōu)先級(jí)中斷(LPI)處理機(jī)制,通過此預(yù)編譯實(shí)現(xiàn)。第2.3節(jié)DSPC語言程序設(shè)計(jì)INTERRUPT:第2.3節(jié)DSPC語言程序設(shè)計(jì)MUST_ITERATE:指明循環(huán)必須被執(zhí)行的次數(shù),以防止循環(huán)被優(yōu)化掉#pragmaMUST_ITERATE(min,max,mult);有時(shí)通過空循環(huán)建立必須的延時(shí),單在程序優(yōu)化時(shí)會(huì)被自動(dòng)優(yōu)化掉。例如:For(i=0;i<100;i++){}編譯器在優(yōu)化時(shí)會(huì)去掉此循環(huán),使用MUST_ITERATE可以保證此循環(huán)執(zhí)行。第2.3節(jié)DSPC語言程序設(shè)計(jì)MUST_ITERATE:第2.3節(jié)DSPC語言程序設(shè)計(jì)嵌入?yún)R編代碼:asm(“assemblertext”);例如:asm(“clrcintm”);編譯器不會(huì)進(jìn)行語法檢查,直接生成匯編代碼嵌入的匯編指令應(yīng)不破壞C語言的環(huán)境,例如堆棧結(jié)構(gòu)、當(dāng)前AR等,或不可控的跳轉(zhuǎn)等。帶asm語句的代碼,使用優(yōu)化器時(shí)須小心,因?yàn)閮?yōu)化器可能會(huì)改變asm語句附近的代碼順序,而引起不期望的結(jié)果.第2.3節(jié)DSPC語言程序設(shè)計(jì)嵌入?yún)R編代碼:第2.3節(jié)DSPC語言程序設(shè)計(jì)訪問IO:先定義io端口號(hào),然后使用ioporttypeporthex_numtype用16位數(shù)據(jù)表示例: ioportintportd0ff;/*IO端口d0ff*/ portd0ff=a; /*輸出a值到portd0ff*/ b=portd0ff; /*讀輸入portd0ff值到b*/ IN*+FP[7],*(0d0ffH)ioport變量定義必須在文件頭位置定義,不能在函數(shù)中定義.ioport變量的使用跟普通變量一樣。

call(portd0ff); a=portd0ff+b; portd0ff+=a;第2.3節(jié)DSPC語言程序設(shè)計(jì)訪問IO:先定義io端口號(hào)第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷處理:查詢式和回調(diào)(中斷服務(wù)程序)兩種方式。查詢式: 程序中查詢中斷標(biāo)志及相應(yīng)的寄存器,判斷中斷的發(fā)生并進(jìn)行相應(yīng)處理。 優(yōu)點(diǎn):流程易于控制,不會(huì)發(fā)生中斷嵌套問題,一般不會(huì)丟失中斷。 缺點(diǎn):中斷實(shí)時(shí)性差。第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷處理:查詢式和回調(diào)(中第2.3節(jié)DSPC語言程序設(shè)計(jì)回調(diào)式: 為中斷指定回調(diào)處理函數(shù)(中斷服務(wù)程序),由CPU中斷處理機(jī)制自動(dòng)調(diào)用。 優(yōu)點(diǎn):中斷實(shí)時(shí)性好,程序結(jié)構(gòu)簡(jiǎn)潔,類似于windows的消息驅(qū)動(dòng)機(jī)制。 缺點(diǎn):處理不好容易造成中斷嵌套或丟失中斷,造成邏輯混亂。第2.3節(jié)DSPC語言程序設(shè)計(jì)回調(diào)式:第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):兩種方式定義中斷服務(wù)函數(shù)。a)c_intd方式定義的函數(shù),c_int00作系統(tǒng)復(fù)位函數(shù)b)Interrupt關(guān)鍵詞定義的函數(shù)。例:voidc_int01(){}interruptvoidtimer2_isr(){}第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):兩種方式定義第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù)與相應(yīng)的中斷對(duì)應(yīng): 通過vectors字段對(duì)應(yīng):*cvectors.asm.ref_c_int00,_timer2_isr.sect”vectors”rset:B_c_int00;00hresetint1:Bint1;02hINT1int2:Bint2;04hINT2int3:B_timer2_isr;06hINT3int4:Bint4;08hINT4第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù)與相應(yīng)的中斷對(duì)第2.3節(jié)DSPC語言程序設(shè)計(jì)cmd文件:MEMORY{PAGE0:/*ProgramMemory*/VECS:org=00000h,len=00040h/*internalFLASH*/……}SECTIONS{ /*SectionsgeneratedbytheC–compiler*/ .text:>FLASHPAGE0/*initialized*/…… /*Sectionsdeclaredbytheuser*/ vectors:>VECSPAGE0/*initialized*/}第2.3節(jié)DSPC語言程序設(shè)計(jì)cmd文件:第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):

中斷服務(wù)函數(shù)類型必須是void。 中斷服務(wù)函數(shù)要盡量短小,減少中斷服務(wù)占用時(shí)間,以避免發(fā)生中斷嵌套或丟中斷。 多個(gè)中斷可以共用一個(gè)中斷服務(wù)函數(shù),除了int00。 注意IMR、INTM等中斷控制量的設(shè)置。 中斷服務(wù)函數(shù)可能和某些編譯選項(xiàng)和優(yōu)化沖突,需注意協(xié)調(diào)。第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):

中斷服務(wù)函數(shù)可以像其他函數(shù)一樣訪問全局變量、分配局部變量和調(diào)用其它函數(shù)。 進(jìn)入中斷服務(wù)函數(shù),編譯器自動(dòng)保護(hù)與運(yùn)行上下文相關(guān)的寄存器,并在中斷服務(wù)函數(shù)結(jié)束時(shí)恢復(fù)運(yùn)行環(huán)境。但并不保存所有寄存器 中斷服務(wù)程序可以任意修改不被保護(hù)的寄存器,如外設(shè)控制寄存器。 中斷服務(wù)函數(shù)也可以被其他c程序調(diào)用,但效率較差。

c_int00是系統(tǒng)保留的復(fù)位中斷函數(shù),不會(huì)被調(diào)用,也不需要保護(hù)任何寄存器。 中斷服務(wù)函數(shù)入口地址放在相應(yīng)的中斷向量處。第2.3節(jié)DSPC語言程序設(shè)計(jì)中斷服務(wù)函數(shù):第2.3節(jié)DSPC語言程序設(shè)計(jì)第2.3節(jié)DSPC語言程序設(shè)計(jì)第二章:DSP程序設(shè)計(jì)第2.1節(jié)概述第2.2節(jié)DSP匯編語言概述及匯編程序設(shè)計(jì)第2.3節(jié)DSPC語言程序設(shè)計(jì)第2.4節(jié)DSPC與匯編混合編程第2.5節(jié)DSP程序燒寫習(xí)題第二章:DSP程序設(shè)計(jì)第2.1節(jié)概述第2.4節(jié)DSPC與匯編混合編程C語言和匯編語言混合編程的四種方法(1)獨(dú)立編寫匯編程序和C程序,分開編譯或匯編成各自的目標(biāo)代碼模塊,再用鏈接器將二者鏈接起來。這種方法比較靈活,但是設(shè)計(jì)者必須自己維護(hù)各匯編模塊的入口和出口代碼,自己計(jì)算傳遞的參數(shù)在堆棧中的偏移量,工作量較大,但是能做到對(duì)程序的絕對(duì)控制。(2)在C程序中使用匯編程序中定義的變量和常數(shù)。(3)在C程序中內(nèi)嵌匯編語句。這種方法可以實(shí)現(xiàn)C語言無法實(shí)現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器。(4)將C語言編譯生成相應(yīng)的匯編代碼,手工修改和優(yōu)化C編譯器生成的匯編代碼。采用這種方法可以控制C編譯器,從而產(chǎn)生具有交叉列表的匯編程序,而設(shè)計(jì)者可以對(duì)其中的匯編語句進(jìn)行修改,然后對(duì)匯編程序進(jìn)行編譯,產(chǎn)生目標(biāo)文件。后3種方法由于在C中直接嵌入了匯編語言,易造成程序混亂,破壞C環(huán)境,甚至導(dǎo)致程序崩潰,而開發(fā)者又很難對(duì)不良結(jié)果進(jìn)行預(yù)期和有效控制。而如果采用第一種方法,只要遵循有關(guān)C語言函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,就能預(yù)見到程序運(yùn)行的結(jié)果,保證程序正確。第2.4節(jié)DSPC與匯編混合編程C語言和匯編語言混合編程第2.4節(jié)DSPC與匯編混合編程DSP

C編譯器將存儲(chǔ)空間分為兩個(gè)線性空間:程序存儲(chǔ)空間,存儲(chǔ)可執(zhí)行碼數(shù)據(jù)存儲(chǔ)空間,存儲(chǔ)程序執(zhí)行過程中的數(shù)據(jù)和堆棧編譯器將存儲(chǔ)空間以分段(section)的方式分配和管理。用戶以不同的方式分配存儲(chǔ)器,可以形成不同的系統(tǒng)配置,連接器將各個(gè)段連接在一起形成最終完整的存儲(chǔ)器結(jié)構(gòu)。*注意:是由連接器決定存儲(chǔ)器影射而不是由編譯器。第2.4節(jié)DSPC與匯編混合編程DSPC編譯器將存儲(chǔ)空第2.4節(jié)DSPC與匯編混合編程已初始化的段:第2.4節(jié)DSPC與匯編混合編程已初始化的段:第2.4節(jié)DSPC與匯編混合編程未初始化的段:匯編自動(dòng)生成.text,.bss和.data段。C編譯器不使用.data段。第2.4節(jié)DSPC與匯編混合編程未初始化的段:匯編自動(dòng)生第2.4節(jié)DSPC與匯編混合編程用戶定義的段:用戶使用CODE_SECTION,DATA_SECTION定義的段,如上面的my_sect,BufferB_sect第2.4節(jié)DSPC與匯編混合編程用戶定義的段:第2.4節(jié)DSPC與匯編混合編程/**********************************//Linkercommandfilelink.cmd/**********************************/-c/*ROMautoinitializationmodel*/-mexample.map/*Createamapfile*/-oexample.out/*Outputfilename*/main.obj/*FirstCmodule*/sub.obj/*SecondCmodule*/asm.obj/*Assemblylanguagemodule*/?lrts25.lib/*Runtime?supportlibrary*/?lmatrix.lib/*Objectlibrary*/MEMORY{PAGE0:PROG:origin=30h,length=0EFD0hPAGE1:DATA:origin=800hlength?0E800h}SECTIONS{.text>PROGPAGE0.cinit>PROGPAGE0.switch>PROGPAGE0.bss>DATAPAGE1.const>DATAPAGE1.sysmem>DATAPAGE1.stack>DATAPAGE1}第2.4節(jié)DSPC與匯編混合編程/***********第2.4節(jié)DSPC與匯編混合編程系統(tǒng)堆棧: DSP硬堆棧:8級(jí),用于保存函數(shù)調(diào)用、中斷服務(wù)函數(shù)等的返回地址,也可以用PUSH等保存其他變量

C編譯器可以生成一定大小的軟堆棧:分配局部變量傳遞函數(shù)參數(shù)保存處理器狀態(tài)保存函數(shù)返回地址保存臨時(shí)結(jié)果保存寄存器內(nèi)容第2.4節(jié)DSPC與匯編混合編程系統(tǒng)堆棧:第2.4節(jié)DSPC與匯編混合編程系統(tǒng)堆棧:編譯器利用兩個(gè)輔助寄存器來管理堆棧:SP堆棧指針(StackPointer),指向當(dāng)前堆棧頂。XAR2幀指針(FP,FramePointer),指向當(dāng)前幀的起始點(diǎn),每個(gè)函數(shù)都會(huì)在堆棧頂部建立一個(gè)新的幀,用來保存局部或臨時(shí)變量。C語言環(huán)境自動(dòng)操作這兩個(gè)寄存器。如果編寫用到堆棧的匯編語言程序,一定要注意正確使用這兩個(gè)寄存器。默認(rèn)堆棧大小是1k。用-stack連接選項(xiàng)可以指定軟件堆棧的大小,用C編寫DSP程序一定注意保留足夠的堆??臻g!注意:編譯器不會(huì)檢查堆棧溢出情況,堆棧溢出會(huì)破壞DSP 運(yùn)行環(huán)境,導(dǎo)致程序失敗。編寫DSP程序和配置DSP 存儲(chǔ)器資源要注意防止堆棧溢出的發(fā)生。第2.4節(jié)DSPC與匯編混合編程系統(tǒng)堆棧:第2.4節(jié)DSPC與匯編混合編程動(dòng)態(tài)內(nèi)存分配:TMS320C2x/C2xx/C5xC語言可調(diào)用malloc、calloc或realloc函數(shù)動(dòng)態(tài)申請(qǐng)內(nèi)存,申請(qǐng)的內(nèi)存將分配在.sysmem塊。動(dòng)態(tài)分配的內(nèi)存只能通過指針進(jìn)行訪問,動(dòng)態(tài)分配使用后可以釋放,這樣可以用于其它目的。將大數(shù)組通過這種方式來分配可以節(jié)省.bss塊的空間。通過連接器的-heap選項(xiàng)可以定義.sysmem塊。unsignedintdata[100];unsignedint*data;data=(unsignedint*)malloc(100*sizeof(unsignedint));第2.4節(jié)DSPC與匯編混合編程動(dòng)態(tài)內(nèi)存分配:第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:

TMS320C2x/C2xx/C5x運(yùn)行環(huán)境對(duì)寄存器的使用有嚴(yán)格的要求,編寫涉及到寄存器的匯編程序,必須嚴(yán)格遵守這些規(guī)則,否則可能造成系統(tǒng)工作異常。寄存器規(guī)則規(guī)定了編譯器如何使用寄存器,和寄存器在函數(shù)調(diào)用的過程中如何進(jìn)行保護(hù)。寄存器按照保護(hù)方式分為兩種: 調(diào)用保存(saveoncall),調(diào)用其它函數(shù)的函數(shù)負(fù)責(zé)保存這些寄存器的內(nèi)容。 入口保存(saveonentry),被調(diào)用的函數(shù)負(fù)責(zé)保存這些寄存器的內(nèi)容。注:無論是否使用優(yōu)化編譯,都必須遵守這些寄存器規(guī)則。第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:第2.4節(jié)DSPC與匯編混合編程寄存器使用規(guī)則:第2.4節(jié)DSPC與匯編混合編程狀態(tài)寄存器使用:第2.4節(jié)DSPC與匯編混合編程狀態(tài)寄存器使用:第2.4節(jié)DSPC與匯編混合編程函數(shù)調(diào)用規(guī)則:TMS320C2x/C2xx/C5x運(yùn)行環(huán)境對(duì)函數(shù)調(diào)用有嚴(yán)格的要求,要調(diào)用C函數(shù)或要被C程序調(diào)用的匯編語言程序必須遵守這些規(guī)則,否則可能破壞C運(yùn)行環(huán)境,造成程序失敗。當(dāng)進(jìn)行函數(shù)調(diào)用時(shí),調(diào)用者要將傳遞參數(shù)壓入系統(tǒng)堆棧傳給被調(diào)用的函數(shù),并將函數(shù)返回地址壓棧。被調(diào)用的函數(shù)要在函數(shù)運(yùn)行結(jié)束時(shí)將返回值放在累加器里返回給調(diào)用者函數(shù)。函數(shù)參數(shù)及返回地址等都是通過堆棧傳遞的,要編寫匯編函數(shù),必須明確函數(shù)調(diào)用的過程中堆棧的變化和應(yīng)該進(jìn)行的處理第2.4節(jié)DSPC與匯編混合編程函數(shù)調(diào)用規(guī)則:函數(shù)調(diào)用過程中堆棧情況:函數(shù)調(diào)用過程中堆棧情況:第2.4節(jié)DSPC與匯編混合編程C語言調(diào)用函數(shù)時(shí)的工作:將參數(shù)反向壓入堆棧(最右端的參數(shù)最先壓棧,最左端的參數(shù)最后壓棧),這樣,當(dāng)函數(shù)被調(diào)用時(shí),最左端的參數(shù)會(huì)在堆棧的最頂部。使用被調(diào)用函數(shù)。被調(diào)用函數(shù)返回前處理各寄存器。當(dāng)被調(diào)用函數(shù)運(yùn)行結(jié)束時(shí),調(diào)用者函數(shù)要將壓入堆棧的參數(shù)彈出以恢復(fù)堆棧狀態(tài)。注:如果用C程序調(diào)用匯編語言程序,C編譯器會(huì)自動(dòng)產(chǎn)生代碼完成這些工作。第2.4節(jié)DSPC與匯編混合編程C語言調(diào)用函數(shù)時(shí)的工作:第2.4節(jié)DSPC與匯編混合編程C語言函數(shù)被調(diào)用時(shí)的工作:將返回地址從硬件堆棧彈出,壓入軟件堆棧。將FP(SP)壓入軟件堆棧。分配局部幀(Frame)。如果函數(shù)中要修改AR6、AR7,將它們壓入堆棧,其它寄存器不用進(jìn)行保護(hù)就可以進(jìn)行修改。實(shí)現(xiàn)函數(shù)功能。如果函數(shù)返回標(biāo)量數(shù)據(jù),將它放入累加器。如果保護(hù)了AR6、AR7,恢復(fù)這兩個(gè)寄存器。刪除局部幀。恢復(fù)FP(SP)。將返回地址從軟件堆棧中彈出,壓入硬件堆棧。返回。第2.4節(jié)DSPC與匯編混合編程C語言函數(shù)被調(diào)用時(shí)的工作第2.4節(jié)DSPC與匯編混合編程POPD*+ ;返回地址從硬堆棧中彈出,壓入軟堆棧(由AR1指示)SARAR0,*+ ;AR0(FP)入軟堆棧SARAR1,* ;AR1(SP)入軟堆棧LARKAR0,SIZE ;FP=局部幀大小LARAR0,*0+ ;FP=SP,SP+=SIZE:分配局部幀SARAR6,*+ ;保存AR6SARAR7,*+ ;保存AR7... ;函數(shù)功能部分MAR*,AR1 ;設(shè)置當(dāng)前AR為AR1MAR*- ;LARAR7,*- ;恢復(fù)AR7LARAR6,*- ;恢復(fù)AR6SBRKSIZE+1 ;釋放局部幀(恢復(fù)AR1(SP)LARAR0,*- ;恢復(fù)AR0(FP)PSHD* ;返回地址壓入硬堆棧RET ;返回第2.4節(jié)DSPC與匯編混合編程POPD*+ ;返回第2.4節(jié)DSPC與匯編混合編程一些特殊的情況:返回一個(gè)結(jié)構(gòu):當(dāng)函數(shù)的返回值為一個(gè)結(jié)構(gòu)時(shí),調(diào)用者負(fù)責(zé)分配存儲(chǔ)空間,并將存儲(chǔ)空間地址作為最后一個(gè)輸入?yún)?shù)傳遞給被調(diào)用函數(shù)。被調(diào)用函數(shù)將要返回的結(jié)構(gòu)拷貝到這個(gè)參數(shù)所指向的內(nèi)存空間。不將返回地址移動(dòng)到軟件堆棧:當(dāng)被調(diào)用函數(shù)不再調(diào)用其它函數(shù),或者確定調(diào)用深度不會(huì)超過8級(jí),可以不用將返回地址移動(dòng)到軟件堆棧。不分配局部幀:如果函數(shù)沒有輸入?yún)?shù),不使用局部變量,就不需要修改XAR2(FP),因此也不需要對(duì)其進(jìn)行保護(hù)。第2.4節(jié)DSPC與匯編混合編程一些特殊的情況:第2.4節(jié)DSPC與匯編混合編程C與匯編混合:C程序調(diào)用匯編函數(shù)必須要滿足前面介紹的調(diào)用規(guī)則和寄存器規(guī)則,C程序可以訪問匯編語言定義的變量或調(diào)用匯編語言函數(shù),同樣匯編語言也可以訪問C程序定義的變量或調(diào)用C函數(shù)。用C程序調(diào)用匯編函數(shù)有以下注意事項(xiàng):所有的函數(shù)(不論用C編寫還是用匯編語言編寫)都必須滿足前面介紹的寄存器規(guī)則。對(duì)于一些寄存器,如果函數(shù)要修改其內(nèi)容,則必須事先對(duì)其進(jìn)行保護(hù)。這些寄存器包括:XAR2(FP),SP,AR6,AR7。其它的寄存器可以不用保護(hù)自由使用。第2.4節(jié)DSPC與匯編混合編程C與匯編混合:第2.4節(jié)DSPC與匯編混合編程注意事項(xiàng):如果函數(shù)改變了狀態(tài)寄存器某些有假定值的位,則必須在函數(shù)結(jié)束前恢復(fù)其原有值。尤其要注意ARP必須為AR1。中斷服務(wù)程序必須保護(hù)所有其用到的寄存器。long型和float型變量在存儲(chǔ)器中的存儲(chǔ)方式為低有效位在低端地址。函數(shù)返回值要通過累加器進(jìn)行傳遞。編譯器會(huì)在所有對(duì)象的名稱前面加下橫線“_”,因此匯編語言模塊定義對(duì)象名稱時(shí)也要以下橫線為前綴,才能使定義的對(duì)象可以被C代碼訪問。例如C語言對(duì)象x在匯編語言中就是_x。匯編語言可以使用任何不帶下橫線前綴的變量而不會(huì)和C語言對(duì)象沖突。任何匯編語言定義的對(duì)象,如果要被C程序訪問,則必須用.global修飾。同樣任何C語言定義的對(duì)象,如果要被匯編語言訪問,也必須以.global修飾。C和匯編互相調(diào)用函數(shù)時(shí),需保證參數(shù)壓棧和出棧的一致性。第2.4節(jié)DSPC與匯編混合編程注意事項(xiàng):第2.4節(jié)DSPC與匯編混合編程第2.4節(jié)DSPC與匯編混合編程第2.4節(jié)DSPC與匯編混合編程C中訪問匯編變量:通常有兩種方式。1.訪問.bss塊中的變量:將要訪問的變量定義在.bss塊中。用.golbal修飾要訪問的變量。在匯編語言中以下橫線“_”為前綴聲明要訪問的變量。在C語言中將變量聲明為外部變量(extern),就可以進(jìn)行正常訪問。C: externintvar; var=1;asm: .bss_var,a1,a2 .gl

溫馨提示

  • 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. 人人文庫(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)論