DSP2833X_C語言+程序燒寫_第1頁
DSP2833X_C語言+程序燒寫_第2頁
DSP2833X_C語言+程序燒寫_第3頁
DSP2833X_C語言+程序燒寫_第4頁
DSP2833X_C語言+程序燒寫_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DSP原理與應用原理與應用The Technology & Applications of DSPs北京交通大學北京交通大學 電氣工程學院電氣工程學院夏明超夏明超 郝瑞祥郝瑞祥 萬慶祝萬慶祝DSP原理與應用原理與應用2021年年12月月18日日2第二章第二章:DSP系統(tǒng)開發(fā)系統(tǒng)開發(fā)l第第2.1節(jié)節(jié) 概述概述l第第2.2節(jié)節(jié) DSP匯編語言概述及匯編程序設計匯編語言概述及匯編程序設計l第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l第第2.5節(jié)節(jié) DSP程序燒寫程序燒寫l習題習題DSP原理與應用原理與應用2021年年12月月18

2、日日3第第2.1節(jié)節(jié) 概述概述l 匯編語言匯編語言: 開發(fā)的效率高,程序執(zhí)行速度快,而且可以合理利用開發(fā)的效率高,程序執(zhí)行速度快,而且可以合理利用芯片的硬件資源芯片的硬件資源開發(fā)難度較大,開發(fā)周期長,可讀性和可移植性差。開發(fā)難度較大,開發(fā)周期長,可讀性和可移植性差。l C語言開發(fā)語言開發(fā):具有兼容性和可移植的優(yōu)點,有利于縮短開發(fā)周期和具有兼容性和可移植的優(yōu)點,有利于縮短開發(fā)周期和減少開發(fā)難度減少開發(fā)難度在運算量較大的情況下,在運算量較大的情況下,C代碼的效率還是無法和手工代碼的效率還是無法和手工編寫的匯編代碼的效率相比,比如編寫的匯編代碼的效率相比,比如FFT運算,運算,l C和匯編的混合編程

3、則可以充分利用前兩者的優(yōu)和匯編的混合編程則可以充分利用前兩者的優(yōu)點,以達到最佳利用點,以達到最佳利用DSP資源的目的。資源的目的。l C和匯編語言混合編程必須遵循相關(guān)函數(shù)調(diào)用規(guī)和匯編語言混合編程必須遵循相關(guān)函數(shù)調(diào)用規(guī)則和寄存器調(diào)用規(guī)則則和寄存器調(diào)用規(guī)則,否則會帶來意想不到的問題。否則會帶來意想不到的問題。DSP原理與應用原理與應用2021年年12月月18日日4第第2.1節(jié)節(jié) 概述概述l CCS開發(fā)實例演示開發(fā)實例演示DSP原理與應用原理與應用2021年年12月月18日日5第二章第二章:DSP系統(tǒng)開發(fā)系統(tǒng)開發(fā)l第第2.1節(jié)節(jié) 概述概述l第第2.2節(jié)節(jié) DSP匯編語言概述及匯編程序設計匯編語言概述

4、及匯編程序設計l第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l第第2.5節(jié)節(jié) DSP程序燒寫程序燒寫l習題習題DSP原理與應用原理與應用2021年年12月月18日日6第第2.2節(jié)節(jié) DSP匯編語言概述及匯編程序設計匯編語言概述及匯編程序設計l匯編語言匯編語言: 累加累加,算術(shù)計算和邏輯運算算術(shù)計算和邏輯運算輔助寄存器和數(shù)據(jù)頁操作輔助寄存器和數(shù)據(jù)頁操作TREG,PREG和乘法指令和乘法指令直接內(nèi)存訪問指令直接內(nèi)存訪問指令(DMA)和和IO操作指令操作指令程序空間訪問指令程序空間訪問指令跳轉(zhuǎn)指令、寄存器操作指令跳轉(zhuǎn)指令、寄存器操作指令l

5、浮點運算指令浮點運算指令l匯編程序設計匯編程序設計: 生成可執(zhí)行代碼過程生成可執(zhí)行代碼過程示例文件示例文件DSP原理與應用原理與應用2021年年12月月18日日7第第2.2.1累加累加,算術(shù)計算和邏輯運算算術(shù)計算和邏輯運算DSP原理與應用原理與應用2021年年12月月18日日8第第2.2.1累加累加,算術(shù)計算和邏輯運算算術(shù)計算和邏輯運算DSP原理與應用原理與應用2021年年12月月18日日9第第2.2.1累加累加,算術(shù)計算和邏輯運算算術(shù)計算和邏輯運算DSP原理與應用原理與應用2021年年12月月18日日10第第2.2.1累加累加,算術(shù)計算和邏輯運算算術(shù)計算和邏輯運算DSP原理與應用原理與應用2

6、021年年12月月18日日11第第2.2.2輔助寄存器和數(shù)據(jù)頁操作輔助寄存器和數(shù)據(jù)頁操作DSP原理與應用原理與應用2021年年12月月18日日12第第2.2.2輔助寄存器和數(shù)據(jù)頁操作輔助寄存器和數(shù)據(jù)頁操作DSP原理與應用原理與應用2021年年12月月18日日13第第2.2.3 TREG,PREG和乘法指令和乘法指令DSP原理與應用原理與應用2021年年12月月18日日14第第2.2.3 TREG,PREG和乘法指令和乘法指令DSP原理與應用原理與應用2021年年12月月18日日15第第2.2.3 TREG,PREG和乘法指令和乘法指令DSP原理與應用原理與應用2021年年12月月18日日16第

7、第2.2.4直接內(nèi)存訪問直接內(nèi)存訪問(DMA)和和IO操作指令操作指令DSP原理與應用原理與應用2021年年12月月18日日17第第2.2.5程序空間訪問指令程序空間訪問指令DSP原理與應用原理與應用2021年年12月月18日日18第第2.2.6 跳轉(zhuǎn)指令跳轉(zhuǎn)指令DSP原理與應用原理與應用2021年年12月月18日日19第第2.2.7 寄存器操作指令寄存器操作指令DSP原理與應用原理與應用2021年年12月月18日日20第第2.2.7 寄存器操作指令寄存器操作指令DSP原理與應用原理與應用2021年年12月月18日日21第第2.2.7 寄存器操作指令寄存器操作指令DSP原理與應用原理與應用20

8、21年年12月月18日日22第第2.2.8 浮點運算指令浮點運算指令l浮點數(shù)簡介浮點數(shù)簡介(IEEE754)單精度浮點數(shù):單精度浮點數(shù):1位符號位位符號位,8位指數(shù)位指數(shù),23位有效數(shù)位有效數(shù)IEEE754-IEEE Standard 754 for Binary Floating Point Arithmetic127).(2) 1(2210EebbbeS單精度浮點數(shù)范圍:單精度浮點數(shù)范圍:3.4028235*1038在此范圍內(nèi)也無法精確表述所有浮點數(shù)在此范圍內(nèi)也無法精確表述所有浮點數(shù)精度:精度:1.19209290 * 10-38可精確表述的數(shù)必須可以用可精確表述的數(shù)必須可以用2的指數(shù)冪次

9、組合描述的指數(shù)冪次組合描述DSP原理與應用原理與應用2021年年12月月18日日23第第2.2.8 浮點運算指令浮點運算指令l浮點數(shù)簡介浮點數(shù)簡介(IEEE754)單精度浮點數(shù):單精度浮點數(shù):1位符號位位符號位,8位指數(shù)位指數(shù),23位有效數(shù)位有效數(shù)IEEE754-IEEE Standard 754 for Binary Floating Point Arithmetic例:例:00111111 01100110 01100110 0110011016進制為:進制為:0X3F666666整形數(shù)為整形數(shù)為1063675494單精度下:符號位單精度下:符號位0(+) 指數(shù)位指數(shù)位E(01111110

10、) 2=126,e=-1 尾數(shù)尾數(shù)1100110 01100110011001102 1.799999952316284179687510 實際值實際值0.89999997615814208984375 DSP原理與應用原理與應用2021年年12月月18日日24第第2.2.8 浮點運算指令浮點運算指令l浮點數(shù)簡介浮點數(shù)簡介(IEEE754)單精度浮點數(shù):單精度浮點數(shù):1位符號位位符號位,8位指數(shù)位指數(shù),23位有效數(shù)位有效數(shù)IEEE754-IEEE Standard 754 for Binary Floating Point Arithmetic單精度運算精度:加、減、乘、除、平方根、余數(shù)單精度

11、運算精度:加、減、乘、除、平方根、余數(shù)、將浮點格式的數(shù)舍入為整數(shù)值、在不同浮點格式、將浮點格式的數(shù)舍入為整數(shù)值、在不同浮點格式之間轉(zhuǎn)換、在浮點和整數(shù)格式之間轉(zhuǎn)換以及比較。之間轉(zhuǎn)換、在浮點和整數(shù)格式之間轉(zhuǎn)換以及比較。四種舍入方向四種舍入方向:向最近數(shù)方向向最近數(shù)方向,向負無窮大向負無窮大,向正無窮向正無窮大以及向大以及向0。五種類型的浮點異常是:無效運算、被零除、上溢五種類型的浮點異常是:無效運算、被零除、上溢、下溢和不精確。、下溢和不精確。*常犯錯誤常犯錯誤: f=0,應該為,應該為-ef FLASHA PAGE = 0 .pinit : FLASHA, PAGE = 0 .text : FL

12、ASHA PAGE = 0 codestart : BEGIN PAGE = 0 ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 csmpasswds : CSM_PWL PAGE = 0 csm_rsvd : CSM_RSVD PAGE = 0 /* Allocate uninitalized data sections: */ .stack : RAMM1 PAGE

13、 = 1 .ebss : RAML4 PAGE = 1 .esysmem : RAMM1 PAGE = 1DSP原理與應用原理與應用2021年年12月月18日日33第第2.2.9 匯編程序設計匯編程序設計-示例文件示例文件l .h文件文件:標號標號,地址地址,中斷向量等定義中斷向量等定義; File name: 280 x.hIMR.set 0004h ; Interrupt Mask RegisterIFR.set 0006h ; Interrupt Flag Register; System configuration and interrupt registersSCSR1.set 70

14、18h ; System Control & Status register. 1SCSR2.set 7019h ; System Control & Status register. 2DINR.set 701Ch ; Device Identification Number register.PIVR.set 701Eh ; Peripheral Interrupt Vector register.PIRQR0.set 7010h ; Peripheral Interrupt Request register 0PIRQR1.set 7011h ; Peripheral I

15、nterrupt Request register 1PIRQR2.set 7012h ; Peripheral Interrupt Request register 2PIACKR0.set 7014h ; Peripheral Interrupt Acknowledge register 0PIACKR1.set 7015h ; Peripheral Interrupt Acknowledge register 1PIACKR2.set 7016h ; Peripheral Interrupt Acknowledge register 2; File name: vector.h.sect

16、vectorsRSVECT B START ; Reset VectorINT1B GISR1 ; Interrupt Level 1INT2B GISR2 ; Interrupt Level 2INT3B GISR3 ; Interrupt Level 3INT4B GISR4 ; Interrupt Level 4INT5B GISR5 ; Interrupt Level 5INT6B GISR6 ; Interrupt Level 6RESERVED B PHANTOM ; ReservedSW_INT8 B PHANTOM ; Software InterruptSW_INT9 B P

17、HANTOM ; Software InterruptSW_INT10 B PHANTOM ; Software InterruptSW_INT11 B PHANTOM ; Software InterruptSW_INT12 B PHANTOM ; Software InterruptSW_INT13 B PHANTOM ; Software InterruptSW_INT14 B PHANTOM ; Software InterruptSW_INT15 B PHANTOM ; Software InterruptSW_INT16 B PHANTOM ; Software Interrupt

18、TRAP B PHANTOM ; Trap vectorNMI B NMI ; Nonmaskable InterruptEMU_TRAP B PHANTOM ; Emulator TrapSW_INT20 B PHANTOM ; Software InterruptSW_INT21 B PHANTOM ; Software InterruptSW_INT22 B PHANTOM ; Software InterruptSW_INT23 B PHANTOM ; Software InterruptSW_INT24 B PHANTOM ; Software InterruptDSP原理與應用原理

19、與應用2021年年12月月18日日34第第2.2.9 匯編程序設計匯編程序設計-示例文件示例文件l .asm文件文件: 程序文件程序文件* File Name: SPI.asm.include 280 xA.h.include vector.h.bss GPR0,1 ;General purpose registers.bss GPR3,1KICK_DOG .macro ;Watchdog reset macroLDP #00E0hSPLK #05555h, WDKEYSPLK #0AAAAh, WDKEYLDP #0h.endm; M A I N C O D E starts here.te

20、xtSTART: LDP #0SETC INTMSPLK #0h,GPR3OUT GPR3,WSGRCLRC SXM CLRC OVMCLRC CNFLDP #WDCR7SPLK #006Fh,WDCRKICK_DOGLDP #SCSR17SPLK #0020h,SCSR1DSP原理與應用原理與應用2021年年12月月18日日35第二章第二章:DSP程序設計程序設計l第第2.1節(jié)節(jié) 概述概述l第第2.2節(jié)節(jié) DSP匯編語言概述及匯編程序設計匯編語言概述及匯編程序設計l第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l第第2.5節(jié)節(jié) DS

21、P程序燒寫程序燒寫l習題習題DSP原理與應用原理與應用2021年年12月月18日日36第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l支持支持ANSI C: 提供相應的編譯器和優(yōu)化工具提供相應的編譯器和優(yōu)化工具對對ANSI C進行了限定和擴展進行了限定和擴展l運行庫運行庫: 字符串操作字符串操作動態(tài)地址分配動態(tài)地址分配數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換DSP原理與應用原理與應用2021年年12月月18日日37第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l 變量和標識變量和標識: 變量和標識符長度變量和標識符長度100個字符,區(qū)分大小寫個字符,區(qū)分大小寫變量和標識符的符號集為變量和標識符的符號集為ASC

22、II,不支持多字節(jié)符號,不支持多字節(jié)符號(如漢字)。(如漢字)。字符或字符串常量中的字符或字符串常量中的16進制進制ESC碼碼(特殊字符,如特殊字符,如0X07)可能會有可能會有32位的值。位的值。多字符的字符變量最后一個有效,如多字符的字符變量最后一個有效,如abc是是cl 數(shù)據(jù)類型數(shù)據(jù)類型: Size_t(sizeof的結(jié)果的結(jié)果)定義為定義為unsigned intPtrdiff_t(指針加減結(jié)果指針加減結(jié)果)定義為定義為int所有的整數(shù)類型所有的整數(shù)類型(char, short, int, 以及這些類型的無以及這些類型的無符號型符號型)都是相同類型都是相同類型,并代表并代表16位的二進

23、制值位的二進制值.Long和和unsigned long代表代表32位二進制值位二進制值.DSP原理與應用原理與應用2021年年12月月18日日38第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l數(shù)據(jù)類型數(shù)據(jù)類型: 有符號數(shù)是用二進制補碼表示有符號數(shù)是用二進制補碼表示.數(shù)據(jù)單元的基礎是字數(shù)據(jù)單元的基礎是字(16位位),BYTE和和WORD一樣一樣char是有符號類型是有符號類型,等同于等同于int枚舉型枚舉型(enum)用用16位值表示位值表示,等同于等同于int浮點類型浮點類型(float,double)是相同的是相同的,遵循遵循TMS320C2x/C2xx/C5x的的32位浮點類型位浮

24、點類型.Long 和和float的數(shù)據(jù)存儲格式為低有效字存儲在的數(shù)據(jù)存儲格式為低有效字存儲在低地址的方式低地址的方式.Long long 和和long double是是64位的位的.DSP原理與應用原理與應用2021年年12月月18日日39第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l數(shù)據(jù)類型數(shù)據(jù)類型: DSP原理與應用原理與應用2021年年12月月18日日40第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l類型轉(zhuǎn)換類型轉(zhuǎn)換: 浮點數(shù)轉(zhuǎn)為整數(shù)為取整截斷浮點數(shù)轉(zhuǎn)為整數(shù)為取整截斷指針類型指針類型(pointer)和和int可以自由轉(zhuǎn)換可以自由轉(zhuǎn)換far pointer 為為22位有效位位

25、有效位l表達式表達式: 有符號整數(shù)相除有符號整數(shù)相除,商符號由兩個數(shù)共同決定商符號由兩個數(shù)共同決定,余數(shù)余數(shù)符號同被除數(shù)符號同被除數(shù)l10/-3=-3,余余1; -10/3=-3余余-1有符號數(shù)右移為算術(shù)右移有符號數(shù)右移為算術(shù)右移,符號位不變符號位不變DSP原理與應用原理與應用2021年年12月月18日日41第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計C訪問訪問16位乘法結(jié)果的高位乘法結(jié)果的高16位位:int m1,m2;int result;result=(long)m1*(long)m2) 16;浮點數(shù)浮點數(shù):32bits FPU +,-, 比較比較(,=, PMPAGE 0.TEX

26、T : PM PAGE 0.BSS : BLK_B2 PAGE 1.DATA : BLK_B1 PAGE 1 BufferB_sect : SARAM_D PAGE 1DSP原理與應用原理與應用2021年年12月月18日日49第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計FAST_FUNC_CALL:指明某一函數(shù)調(diào)用時采用快速函數(shù)調(diào)用指明某一函數(shù)調(diào)用時采用快速函數(shù)調(diào)用(FFC)機制,而不是機制,而不是使用普通函數(shù)調(diào)用流程:使用普通函數(shù)調(diào)用流程:FFC進棧出棧及函數(shù)返回有所不同,調(diào)用更快速。進棧出棧及函數(shù)返回有所不同,調(diào)用更快速。#pragma FAST_FUNC_CALL (func)這類

27、函數(shù)返回時的這類函數(shù)返回時的asm代碼必須是:代碼必須是:LB *XAR7DSP原理與應用原理與應用2021年年12月月18日日50第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計FUNC_EXT_CALLED:指明某一未使用的函數(shù),使其不會在指明某一未使用的函數(shù),使其不會在C優(yōu)化時被刪除。優(yōu)化時被刪除。#pragma FUNC_EXT_CALLED (func)DSP原理與應用原理與應用2021年年12月月18日日51第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計INTERRUPT:指明函數(shù)為中斷處理函數(shù)指明函數(shù)為中斷處理函數(shù)(函數(shù)返回機制使用函數(shù)返回機制使用IRP)#pragma I

28、NTERRUPT ( func );#pragma INTERRUPT;#pragma INTERRUPT (func, HPI|LPI);#pragma INTERRUPT ( HPI|LPI);)FPU有高優(yōu)先級中斷有高優(yōu)先級中斷(HPI)和低優(yōu)先級中斷和低優(yōu)先級中斷(LPI)處理機制,處理機制,通過此預編譯實現(xiàn)。通過此預編譯實現(xiàn)。DSP原理與應用原理與應用2021年年12月月18日日52第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計MUST_ITERATE:指明循環(huán)必須被執(zhí)行的次數(shù),以防止循環(huán)被優(yōu)化掉指明循環(huán)必須被執(zhí)行的次數(shù),以防止循環(huán)被優(yōu)化掉#pragma MUST_ITERATE

29、 (min,max,mult);有時通過空循環(huán)建立必須的延時,單在程序優(yōu)化時會被自有時通過空循環(huán)建立必須的延時,單在程序優(yōu)化時會被自動優(yōu)化掉。動優(yōu)化掉。例如:例如:For( i=0; i FLASH PAGE 0 /* initialized */ /* Sections declared by the user */ vectors: VECS PAGE 0 /* initialized */ DSP原理與應用原理與應用2021年年12月月18日日60第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計中斷服務函數(shù)中斷服務函數(shù):中斷服務函數(shù)類型必須是中斷服務函數(shù)類型必須是void。中斷服務函數(shù)

30、要盡量短小,減少中斷服務占用時中斷服務函數(shù)要盡量短小,減少中斷服務占用時間,以避免發(fā)生中斷嵌套或丟中斷。間,以避免發(fā)生中斷嵌套或丟中斷。 多個中斷可以共用一個中斷服務函數(shù),除了多個中斷可以共用一個中斷服務函數(shù),除了int00。注意注意IMR、INTM等中斷控制量的設置。等中斷控制量的設置。中斷服務函數(shù)可能和某些編譯選項和優(yōu)化沖突,中斷服務函數(shù)可能和某些編譯選項和優(yōu)化沖突,需注意協(xié)調(diào)。需注意協(xié)調(diào)。DSP原理與應用原理與應用2021年年12月月18日日61第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計中斷服務函數(shù)中斷服務函數(shù):中斷服務函數(shù)可以像其他函數(shù)一樣訪問全局變量、分配局中斷服務函數(shù)可以像

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

32、不會被調(diào)用,也不需要保護任何寄存器。需要保護任何寄存器。中斷服務函數(shù)入口地址放在相應的中斷向量處。中斷服務函數(shù)入口地址放在相應的中斷向量處。DSP原理與應用原理與應用2021年年12月月18日日62第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計DSP原理與應用原理與應用2021年年12月月18日日63第二章第二章:DSP程序設計程序設計l第第2.1節(jié)節(jié) 概述概述l第第2.2節(jié)節(jié) DSP匯編語言概述及匯編程序設計匯編語言概述及匯編程序設計l第第2.3節(jié)節(jié) DSP C語言程序設計語言程序設計l第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l第第2.5節(jié)節(jié) DSP程序燒寫程序燒寫l習題習

33、題DSP原理與應用原理與應用2021年年12月月18日日64第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l C語言和匯編語言混合編程的四種方法語言和匯編語言混合編程的四種方法 (1) 獨立編寫匯編程序和獨立編寫匯編程序和C程序,分開編譯或匯編成各自的目標代程序,分開編譯或匯編成各自的目標代碼模塊,再用鏈接器將二者鏈接起來。這種方法比較靈活,但是碼模塊,再用鏈接器將二者鏈接起來。這種方法比較靈活,但是設計者必須自己維護各匯編模塊的入口和出口代碼,自己計算傳設計者必須自己維護各匯編模塊的入口和出口代碼,自己計算傳遞的參數(shù)在堆棧中的偏移量,工作量較大,但是能做到對程序的遞的參數(shù)在堆棧中的偏

34、移量,工作量較大,但是能做到對程序的絕對控制。絕對控制。 (2) 在在C程序中使用匯編程序中定義的變量和常數(shù)。程序中使用匯編程序中定義的變量和常數(shù)。 (3) 在在C程序中內(nèi)嵌匯編語句。這種方法可以實現(xiàn)程序中內(nèi)嵌匯編語句。這種方法可以實現(xiàn)C語言無法實現(xiàn)語言無法實現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器。的一些硬件控制功能,如修改中斷控制寄存器。 (4) 將將C語言編譯生成相應的匯編代碼,手工修改和優(yōu)化語言編譯生成相應的匯編代碼,手工修改和優(yōu)化C編譯器編譯器生成的匯編代碼。采用這種方法可以控制生成的匯編代碼。采用這種方法可以控制C編譯器,從而產(chǎn)生具編譯器,從而產(chǎn)生具有交叉列表的匯編程序,而設計者

35、可以對其中的匯編語句進行修有交叉列表的匯編程序,而設計者可以對其中的匯編語句進行修改,然后對匯編程序進行編譯,產(chǎn)生目標文件。改,然后對匯編程序進行編譯,產(chǎn)生目標文件。l 后后3種方法由于在種方法由于在C中直接嵌入了匯編語言中直接嵌入了匯編語言,易造成程序混易造成程序混亂,破壞亂,破壞C環(huán)境,甚至導致程序崩潰,而開發(fā)者又很難對環(huán)境,甚至導致程序崩潰,而開發(fā)者又很難對不良結(jié)果進行預期和有效控制。而如果采用第一種方法,不良結(jié)果進行預期和有效控制。而如果采用第一種方法,只要遵循有關(guān)只要遵循有關(guān)C語言函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,就能預語言函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,就能預見到程序運行的結(jié)果,保證程序正確。見

36、到程序運行的結(jié)果,保證程序正確。DSP原理與應用原理與應用2021年年12月月18日日65第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程DSP C編譯器將存儲空間分為兩個線性空間:編譯器將存儲空間分為兩個線性空間:n 程序存儲空間,存儲可執(zhí)行碼程序存儲空間,存儲可執(zhí)行碼n 數(shù)據(jù)存儲空間,存儲程序執(zhí)行過程中的數(shù)據(jù)和堆數(shù)據(jù)存儲空間,存儲程序執(zhí)行過程中的數(shù)據(jù)和堆棧棧編譯器將存儲空間以分段編譯器將存儲空間以分段(section)的方式分配和管的方式分配和管理。用戶以不同的方式分配存儲器,可以形成不理。用戶以不同的方式分配存儲器,可以形成不同的系統(tǒng)配置,連接器將各個段連接在一起形成同的系統(tǒng)配置,

37、連接器將各個段連接在一起形成最終完整的存儲器結(jié)構(gòu)。最終完整的存儲器結(jié)構(gòu)。*注意:是由連接器決定存儲器影射而不是由編譯器。注意:是由連接器決定存儲器影射而不是由編譯器。DSP原理與應用原理與應用2021年年12月月18日日66第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程已初始化的段:已初始化的段:.text包含所有可執(zhí)行代碼和浮點型常量PAGE 0.pinit包含初始化時的程序代碼PAGE 0.cinit包含初始化變量和常量表PAGE 0.const包含字符串常量,以及以const修飾的全局或靜態(tài)變量的聲明和初始化PAGE 1.econst 擴展常量PAGE 1.switch包含swi

38、tch語句的分支跳轉(zhuǎn)地址表PAGE 0DSP原理與應用原理與應用2021年年12月月18日日67第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程未初始化的段:未初始化的段:.bss為全局和靜態(tài)變量保留空間PAGE 1.ebss擴展變量空間PAGE1.stack為系統(tǒng)軟件堆棧分配空間PAGE 1.sysmem為動態(tài)分配的內(nèi)存保留空間,可以被calloc、malloc、realloc函數(shù)使用PAGE 1.esysmem 擴展動態(tài)內(nèi)存空間PAGE1匯編自動生成匯編自動生成.text,.bss和和.data段。段。C編譯器不使編譯器不使用用.data段。段。DSP原理與應用原理與應用2021年年

39、12月月18日日68第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程用戶定義的段:用戶定義的段:用戶使用用戶使用CODE_SECTION,DATA_SECTION定義的定義的段,如上面的段,如上面的 my_sect, BufferB_sectDSP原理與應用原理與應用2021年年12月月18日日69第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程l/*/l/ Linker command file link.cmdl/*/l-c /* ROM autoinitialization model */l-m example.map /* Create a map file */l-o

40、example.out /* Output file name */lmain.obj /* First C module */lsub.obj /* Second C module */lasm.obj /* Assembly language module */ll rts25.lib /* Runtimesupport library */ll matrix.lib /* Object library */lMEMORYllPAGE 0 : PROG: origin = 30h, length = 0EFD0hlPAGE 1 : DATA: origin = 800h length 0E

41、800hllSECTIONSll.text PROG PAGE 0l.cinit PROG PAGE 0l.switch PROG PAGE 0l.bss DATA PAGE 1l.const DATA PAGE 1l.sysmem DATA PAGE 1l.stack DATA PAGE 1lDSP原理與應用原理與應用2021年年12月月18日日70第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程系統(tǒng)堆棧系統(tǒng)堆棧:DSP 硬堆棧硬堆棧:8級,用于保存函數(shù)調(diào)用、中斷服務函級,用于保存函數(shù)調(diào)用、中斷服務函數(shù)等的返回地址,也可以用數(shù)等的返回地址,也可以用PUSH等保存其他變量等保存其他變量C

42、編譯器可以生成一定大小的軟堆棧:編譯器可以生成一定大小的軟堆棧: 分配局部變量分配局部變量 傳遞函數(shù)參數(shù)傳遞函數(shù)參數(shù) 保存處理器狀態(tài)保存處理器狀態(tài) 保存函數(shù)返回地址保存函數(shù)返回地址 保存臨時結(jié)果保存臨時結(jié)果 保存寄存器內(nèi)容保存寄存器內(nèi)容DSP原理與應用原理與應用2021年年12月月18日日71第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程系統(tǒng)堆棧系統(tǒng)堆棧:編譯器利用兩個輔助寄存器來管理堆棧:編譯器利用兩個輔助寄存器來管理堆棧: SP堆棧指針堆棧指針(Stack Pointer),指向當前堆棧頂。,指向當前堆棧頂。 XAR2幀指針幀指針(FP, Frame Pointer),指向當前幀的

43、起始點,指向當前幀的起始點,每個函數(shù)都會在堆棧頂部建立一個新的幀,用來保存局部每個函數(shù)都會在堆棧頂部建立一個新的幀,用來保存局部或臨時變量?;蚺R時變量。C語言環(huán)境自動操作這兩個寄存器。如果編寫用到堆棧的匯語言環(huán)境自動操作這兩個寄存器。如果編寫用到堆棧的匯編語言程序,一定要注意正確使用這兩個寄存器。編語言程序,一定要注意正確使用這兩個寄存器。默認堆棧大小是默認堆棧大小是1k。用。用-stack連接選項可以指定軟件堆棧的連接選項可以指定軟件堆棧的大小,用大小,用C編寫編寫DSP程序一定注意保留足夠的堆??臻g!程序一定注意保留足夠的堆??臻g!注意:編譯器不會檢查堆棧溢出情況,堆棧溢出會破壞注意:編譯

44、器不會檢查堆棧溢出情況,堆棧溢出會破壞DSP運行環(huán)境,導致程序失敗。編寫運行環(huán)境,導致程序失敗。編寫DSP程序和配置程序和配置DSP存儲器資源要注意防止堆棧溢出的發(fā)生。存儲器資源要注意防止堆棧溢出的發(fā)生。DSP原理與應用原理與應用2021年年12月月18日日72第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程動態(tài)內(nèi)存分配動態(tài)內(nèi)存分配:TMS320C2x/C2xx/C5x C語言可調(diào)用語言可調(diào)用malloc、calloc或或realloc函數(shù)動態(tài)申請內(nèi)存,申請的內(nèi)存將分配在函數(shù)動態(tài)申請內(nèi)存,申請的內(nèi)存將分配在.sysmem塊。塊。動態(tài)分配的內(nèi)存只能通過指針進行訪問,動態(tài)分配使用后可動態(tài)分配

45、的內(nèi)存只能通過指針進行訪問,動態(tài)分配使用后可以釋放,這樣可以用于其它目的。將大數(shù)組通過這種方式以釋放,這樣可以用于其它目的。將大數(shù)組通過這種方式來分配可以節(jié)省來分配可以節(jié)省.bss塊的空間。塊的空間。通過連接器的通過連接器的-heap選項可以定義選項可以定義.sysmem塊。塊。unsigned int data100;unsigned int *data;data =(unsigned int *) malloc (100 * sizeof (unsigned int);DSP原理與應用原理與應用2021年年12月月18日日73第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程寄存器使用

46、規(guī)則寄存器使用規(guī)則:TMS320C2x/C2xx/C5x運行環(huán)境對寄存器的使用有嚴格的運行環(huán)境對寄存器的使用有嚴格的要求,編寫涉及到寄存器的匯編程序,必須嚴格遵守這些要求,編寫涉及到寄存器的匯編程序,必須嚴格遵守這些規(guī)則,否則可能造成系統(tǒng)工作異常。寄存器規(guī)則規(guī)定了編規(guī)則,否則可能造成系統(tǒng)工作異常。寄存器規(guī)則規(guī)定了編譯器如何使用寄存器,和寄存器在函數(shù)調(diào)用的過程中如何譯器如何使用寄存器,和寄存器在函數(shù)調(diào)用的過程中如何進行保護。進行保護。寄存器按照保護方式分為兩種:寄存器按照保護方式分為兩種:調(diào)用保存(調(diào)用保存(save on call),調(diào)用其它函數(shù)的函數(shù)負責保存),調(diào)用其它函數(shù)的函數(shù)負責保存這些

47、寄存器的內(nèi)容。這些寄存器的內(nèi)容。入口保存(入口保存(save on entry),被調(diào)用的函數(shù)負責保存這些),被調(diào)用的函數(shù)負責保存這些寄存器的內(nèi)容。寄存器的內(nèi)容。注:無論是否使用優(yōu)化編譯,都必須遵守這些寄存器規(guī)則。注:無論是否使用優(yōu)化編譯,都必須遵守這些寄存器規(guī)則。DSP原理與應用原理與應用2021年年12月月18日日74第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程寄存器使用規(guī)則寄存器使用規(guī)則:DSP原理與應用原理與應用2021年年12月月18日日75第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程寄存器使用規(guī)則寄存器使用規(guī)則:DSP原理與應用原理與應用2021年年12月月18

48、日日76第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程狀態(tài)寄存器使用狀態(tài)寄存器使用:單元名稱假定值 修改ARP輔助寄存器指針1YesC進位標志-YesDP數(shù)據(jù)頁-YesOV溢出標志-YesOVM溢出模式0NoPM乘積移位模式0NoSXM符號擴展模式-YesTC測試模式-YesDSP原理與應用原理與應用2021年年12月月18日日77第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程函數(shù)調(diào)用規(guī)則函數(shù)調(diào)用規(guī)則:TMS320C2x/C2xx/C5x運行環(huán)境對函數(shù)調(diào)用有嚴格運行環(huán)境對函數(shù)調(diào)用有嚴格的要求,要調(diào)用的要求,要調(diào)用C函數(shù)或要被函數(shù)或要被C程序調(diào)用的匯編語程序調(diào)用的匯編語言程序必須

49、遵守這些規(guī)則,否則可能破壞言程序必須遵守這些規(guī)則,否則可能破壞C運行環(huán)運行環(huán)境,造成程序失敗。境,造成程序失敗。 當進行函數(shù)調(diào)用時,調(diào)用者要將傳遞參數(shù)壓入系統(tǒng)堆棧傳當進行函數(shù)調(diào)用時,調(diào)用者要將傳遞參數(shù)壓入系統(tǒng)堆棧傳給被調(diào)用的函數(shù),并將函數(shù)返回地址壓棧。給被調(diào)用的函數(shù),并將函數(shù)返回地址壓棧。 被調(diào)用的函數(shù)要在函數(shù)運行結(jié)束時將返回值放在累加器里被調(diào)用的函數(shù)要在函數(shù)運行結(jié)束時將返回值放在累加器里返回給調(diào)用者函數(shù)。返回給調(diào)用者函數(shù)。函數(shù)參數(shù)及返回地址等都是通過堆棧傳遞的,要編函數(shù)參數(shù)及返回地址等都是通過堆棧傳遞的,要編寫匯編函數(shù),必須明確函數(shù)調(diào)用的過程中堆棧的寫匯編函數(shù),必須明確函數(shù)調(diào)用的過程中堆棧的

50、變化和應該進行的處理變化和應該進行的處理DSP原理與應用原理與應用2021年年12月月18日日78函數(shù)調(diào)用過程中堆棧情況:函數(shù)調(diào)用過程中堆棧情況:DSP原理與應用原理與應用2021年年12月月18日日79第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程C語言調(diào)用函數(shù)時的工作:語言調(diào)用函數(shù)時的工作:l 將參數(shù)反向壓入堆棧(最右端的參數(shù)最先壓棧,將參數(shù)反向壓入堆棧(最右端的參數(shù)最先壓棧,最左端的參數(shù)最后壓棧),這樣,當函數(shù)被調(diào)用最左端的參數(shù)最后壓棧),這樣,當函數(shù)被調(diào)用時,最左端的參數(shù)會在堆棧的最頂部。時,最左端的參數(shù)會在堆棧的最頂部。l 使用被調(diào)用函數(shù)。使用被調(diào)用函數(shù)。l 被調(diào)用函數(shù)返回前

51、處理各寄存器。被調(diào)用函數(shù)返回前處理各寄存器。l 當被調(diào)用函數(shù)運行結(jié)束時,調(diào)用者函數(shù)要將壓入當被調(diào)用函數(shù)運行結(jié)束時,調(diào)用者函數(shù)要將壓入堆棧的參數(shù)彈出以恢復堆棧狀態(tài)。堆棧的參數(shù)彈出以恢復堆棧狀態(tài)。注:如果用注:如果用C程序調(diào)用匯編語言程序,程序調(diào)用匯編語言程序,C編譯器會自編譯器會自動產(chǎn)生代碼完成這些工作。動產(chǎn)生代碼完成這些工作。DSP原理與應用原理與應用2021年年12月月18日日80第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程C語言函數(shù)被調(diào)用時的工作:語言函數(shù)被調(diào)用時的工作:l將返回地址從硬件堆棧彈出,壓入軟件堆棧。將返回地址從硬件堆棧彈出,壓入軟件堆棧。l將將FP(SP)壓入軟件堆

52、棧。壓入軟件堆棧。l分配局部幀分配局部幀(Frame)。l如果函數(shù)中要修改如果函數(shù)中要修改AR6、AR7,將它們壓入堆棧,其它寄存器不用進,將它們壓入堆棧,其它寄存器不用進行保護就可以進行修改。行保護就可以進行修改。l實現(xiàn)函數(shù)功能。實現(xiàn)函數(shù)功能。l如果函數(shù)返回標量數(shù)據(jù),將它放入累加器。如果函數(shù)返回標量數(shù)據(jù),將它放入累加器。l如果保護了如果保護了AR6、AR7,恢復這兩個寄存器。,恢復這兩個寄存器。l刪除局部幀。刪除局部幀。l恢復恢復FP(SP)。l將返回地址從軟件堆棧中彈出,壓入硬件堆棧。將返回地址從軟件堆棧中彈出,壓入硬件堆棧。1.返回。返回。DSP原理與應用原理與應用2021年年12月月1

53、8日日81第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程POPD *+; 返回地址從硬堆棧中彈出,壓入軟堆棧返回地址從硬堆棧中彈出,壓入軟堆棧(由由AR1指示指示)SAR AR0,*+; AR0(FP)入軟堆棧入軟堆棧SAR AR1,*; AR1(SP)入軟堆棧入軟堆棧LARK AR0,SIZE ; FP=局部幀大小局部幀大小LAR AR0,*0+ ; FP = SP, SP += SIZE: 分配局部幀分配局部幀SAR AR6,*+ ; 保存保存AR6SAR AR7,*+ ; 保存保存AR7.; 函數(shù)功能部分函數(shù)功能部分MAR *,AR1 ; 設置當前設置當前AR為為AR1MAR *

54、-; LAR AR7,*-; 恢復恢復AR7LAR AR6,*-; 恢復恢復AR6SBRK SIZE+1 ; 釋放局部幀釋放局部幀(恢復恢復AR1(SP)LAR AR0,*-; 恢復恢復AR0(FP)PSHD *; 返回地址壓入硬堆棧返回地址壓入硬堆棧RET; 返回返回DSP原理與應用原理與應用2021年年12月月18日日82第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程一些特殊的情況:一些特殊的情況:返回一個結(jié)構(gòu):當函數(shù)的返回值為一個結(jié)構(gòu)時,調(diào)用者負責返回一個結(jié)構(gòu):當函數(shù)的返回值為一個結(jié)構(gòu)時,調(diào)用者負責分配存儲空間,并將存儲空間地址作為最后一個輸入?yún)?shù)分配存儲空間,并將存儲空間地址作

55、為最后一個輸入?yún)?shù)傳遞給被調(diào)用函數(shù)。被調(diào)用函數(shù)將要返回的結(jié)構(gòu)拷貝到這傳遞給被調(diào)用函數(shù)。被調(diào)用函數(shù)將要返回的結(jié)構(gòu)拷貝到這個參數(shù)所指向的內(nèi)存空間。個參數(shù)所指向的內(nèi)存空間。不將返回地址移動到軟件堆棧:當被調(diào)用函數(shù)不再調(diào)用其它不將返回地址移動到軟件堆棧:當被調(diào)用函數(shù)不再調(diào)用其它函數(shù),或者確定調(diào)用深度不會超過函數(shù),或者確定調(diào)用深度不會超過8級,可以不用將返回級,可以不用將返回地址移動到軟件堆棧。地址移動到軟件堆棧。不分配局部幀:如果函數(shù)沒有輸入?yún)?shù),不使用局部變量,不分配局部幀:如果函數(shù)沒有輸入?yún)?shù),不使用局部變量,就不需要修改就不需要修改XAR2(FP),因此也不需要對其進行保護。),因此也不需要對其

56、進行保護。DSP原理與應用原理與應用2021年年12月月18日日83第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程C與匯編混合:與匯編混合:C C程序調(diào)用匯編函數(shù)必須要滿足前面介紹的調(diào)用規(guī)則程序調(diào)用匯編函數(shù)必須要滿足前面介紹的調(diào)用規(guī)則和寄存器規(guī)則,和寄存器規(guī)則,C C程序可以訪問匯編語言定義的變程序可以訪問匯編語言定義的變量或調(diào)用匯編語言函數(shù),同樣匯編語言也可以訪量或調(diào)用匯編語言函數(shù),同樣匯編語言也可以訪問問C C程序定義的變量或調(diào)用程序定義的變量或調(diào)用C C函數(shù)。用函數(shù)。用C C程序調(diào)用匯程序調(diào)用匯編函數(shù)有以下注意事項:編函數(shù)有以下注意事項:l 所有的函數(shù)(不論用所有的函數(shù)(不論用C

57、 C編寫還是用匯編語言編寫)都必須編寫還是用匯編語言編寫)都必須滿足前面介紹的寄存器規(guī)則。滿足前面介紹的寄存器規(guī)則。1.1. 對于一些寄存器,如果函數(shù)要修改其內(nèi)容,則必須事先對對于一些寄存器,如果函數(shù)要修改其內(nèi)容,則必須事先對其進行保護。這些寄存器包括:其進行保護。這些寄存器包括:XAR2(FP)XAR2(FP),SPSP,AR6AR6,AR7AR7。其它的寄存器可以不用保護自由使用。其它的寄存器可以不用保護自由使用。DSP原理與應用原理與應用2021年年12月月18日日84第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程注意事項:注意事項:l如果函數(shù)改變了狀態(tài)寄存器某些有假定值的位,則

58、必須在函數(shù)結(jié)束前如果函數(shù)改變了狀態(tài)寄存器某些有假定值的位,則必須在函數(shù)結(jié)束前恢復其原有值。尤其要注意恢復其原有值。尤其要注意ARPARP必須為必須為AR1AR1。l中斷服務程序必須保護所有其用到的寄存器。中斷服務程序必須保護所有其用到的寄存器。llonglong型和型和floatfloat型變量在存儲器中的存儲方式為低有效位在低端地址。型變量在存儲器中的存儲方式為低有效位在低端地址。l函數(shù)返回值要通過累加器進行傳遞。函數(shù)返回值要通過累加器進行傳遞。l編譯器會在所有對象的名稱前面加下橫線編譯器會在所有對象的名稱前面加下橫線“_ _”,因此匯編語言模塊定,因此匯編語言模塊定義對象名稱時也要以下橫線

59、為前綴,才能使定義的對象可以被義對象名稱時也要以下橫線為前綴,才能使定義的對象可以被C C代碼代碼訪問。例如訪問。例如C C語言對象語言對象x x在匯編語言中就是在匯編語言中就是_x_x。匯編語言可以使用任何。匯編語言可以使用任何不帶下橫線前綴的變量而不會和不帶下橫線前綴的變量而不會和C C語言對象沖突。語言對象沖突。l任何匯編語言定義的對象,如果要被任何匯編語言定義的對象,如果要被C C程序訪問,則必須用程序訪問,則必須用.global.global修修飾。同樣任何飾。同樣任何C C語言定義的對象,如果要被匯編語言訪問,也必須語言定義的對象,如果要被匯編語言訪問,也必須以以.global.g

60、lobal修飾。修飾。3.3. C C和匯編互相調(diào)用函數(shù)時,需保證參數(shù)壓棧和出棧的一致性。和匯編互相調(diào)用函數(shù)時,需保證參數(shù)壓棧和出棧的一致性。DSP原理與應用原理與應用2021年年12月月18日日85第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程DSP原理與應用原理與應用2021年年12月月18日日86第第2.4節(jié)節(jié) DSP C與匯編混合編程與匯編混合編程C C中訪問匯編變量:通常有兩種方式。中訪問匯編變量:通常有兩種方式。1.1.訪問訪問.bss.bss塊中的變量:塊中的變量: 將要訪問的變量定義在將要訪問的變量定義在.bss.bss塊中。塊中。 用用.golbal.golbal修飾要訪問的變量。修飾要訪

溫馨提示

  • 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

提交評論