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

下載本文檔

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

文檔簡(jiǎn)介

1、關(guān)于實(shí)驗(yàn)安排,10周和11周的周二晚上在興隆山校區(qū)計(jì)算中心1號(hào)和3號(hào)機(jī)房(1、2班1號(hào)機(jī)房,3、4班2號(hào)機(jī)房,17:30前到)開(kāi)放實(shí)驗(yàn):11周、12周和13周在千佛山校區(qū)機(jī)械廠教學(xué)車(chē)間樓207(1、2班星期六全天;3、4班星期天全天:如有特殊事情者,可靈活選擇;上午9:00下午17:00)實(shí)驗(yàn)后撰寫(xiě)實(shí)驗(yàn)報(bào)告集成開(kāi)發(fā)環(huán)境先用熟4.6版本;然后會(huì)用5.0版本,本周實(shí)驗(yàn)安排,實(shí)驗(yàn)4:掌握最基本C語(yǔ)言程序的調(diào)試及運(yùn)行方法1.建立一個(gè)C語(yǔ)言工程,并按要求編寫(xiě)求兩個(gè)數(shù)最大值的C語(yǔ)言程序,編譯并排錯(cuò);2.使用全速調(diào)試,并觀察程序運(yùn)行結(jié)果;3.使用單步調(diào)試,并觀察數(shù)據(jù)區(qū)、寄存器區(qū)、存儲(chǔ)器區(qū)的數(shù)據(jù)變化。實(shí)驗(yàn)5:

2、使用仿真方法,編寫(xiě)并調(diào)試復(fù)雜的C語(yǔ)言程序1.自定義一個(gè)包含10個(gè)無(wú)符號(hào)int型的數(shù)組,數(shù)組元素分別是10,9,8,7,6,5,4,3,2,1,0。使用冒泡排序法對(duì)該數(shù)組元素進(jìn)行從小到大排序,調(diào)試并觀察存儲(chǔ)器區(qū)數(shù)據(jù)變化,程序要有注釋。,本周實(shí)驗(yàn)安排,2.基于上個(gè)程序,把排序好的數(shù)組進(jìn)行數(shù)字濾波:去除最大的3個(gè)和最小的3個(gè),剩下的求平均,調(diào)試并觀察存儲(chǔ)器區(qū)數(shù)據(jù)變化,程序要有注釋。3.課本195頁(yè)例2、例3,課本196頁(yè)例4調(diào)試并觀察存儲(chǔ)器區(qū)數(shù)據(jù)變化。,第六章C語(yǔ)言程序設(shè)計(jì),6-1C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)6-2MC9S12的C編程與ANSIC的不同6-3C程序設(shè)計(jì)舉例,內(nèi)容提要:,單片機(jī)編程語(yǔ)言匯編語(yǔ)言?xún)?yōu)

3、點(diǎn):執(zhí)行效率高,時(shí)序控制精確C語(yǔ)言?xún)?yōu)點(diǎn):程序開(kāi)發(fā)速度快,提高開(kāi)發(fā)工作效率;軟件調(diào)試直觀;可維護(hù)性好;可移植性好(與匯編語(yǔ)言相比較)。單片機(jī)C語(yǔ)言單片機(jī)C語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言的用法基本相同,但是單片機(jī)C語(yǔ)言是針對(duì)于資源少的MCU,它的編程方法和編程手段與PC機(jī)上使用C語(yǔ)言還是有很大差別。,6-1C語(yǔ)言程序設(shè)計(jì)基礎(chǔ),多文件C語(yǔ)言工程的頭文件當(dāng)代碼量非常大時(shí),程序員一般會(huì)把代碼分成幾個(gè)部分,然后寫(xiě)入到多個(gè)文件中。這些文件一般分為C文件和H文件。作為一般規(guī)則,以下內(nèi)容應(yīng)該放到H文件中:預(yù)處理和宏定義結(jié)構(gòu)、聯(lián)合和枚舉聲明typedef聲明外部函數(shù)聲明全局變量聲明如果定義的變量?jī)H僅被一個(gè)C文件所私有,那么不可

4、放到H文件中。,其它C語(yǔ)言基礎(chǔ)知識(shí)參見(jiàn)補(bǔ)充課件:“補(bǔ)充(自己看)_C語(yǔ)言基礎(chǔ).PPT”,CodeWarrior數(shù)據(jù)類(lèi)型,6-2MC9S12的C編程與ANSIC的不同,自定義CodeWarrior數(shù)據(jù)類(lèi)型,在CodeWarrior環(huán)境下按ALT+F7打開(kāi)工程的通用設(shè)置,選擇“CompilerforHC12”面板然后點(diǎn)按鈕“TypeSizes”。,建議不要隨意更改數(shù)據(jù)類(lèi)型的設(shè)置,數(shù)據(jù)類(lèi)型的事實(shí),代碼大小和執(zhí)行時(shí)間的最大節(jié)約可通過(guò)為變量選擇最合適的數(shù)據(jù)類(lèi)型而得到。16位微控制器內(nèi)部的數(shù)據(jù)長(zhǎng)度是16位(2字節(jié)),所以首選的數(shù)據(jù)類(lèi)型是“int”。16位機(jī)處理16位數(shù)據(jù)比8位數(shù)據(jù)的效率更高。對(duì)于9S12單

5、片機(jī)來(lái)說(shuō),16位數(shù)據(jù)類(lèi)型效率最高,因此在使用中,盡量選擇int類(lèi)型數(shù)據(jù)。,存貯類(lèi)修飾符,以下關(guān)鍵字用于聲明變量,以指定特定需要或內(nèi)存中變量存貯的相關(guān)條件。static(靜態(tài)變量)volatile(可變變量)const(只讀變量)這三個(gè)關(guān)鍵字,一起讓我們不僅可寫(xiě)出好的代碼,而且可寫(xiě)出緊湊的代碼。,static,在函數(shù)體聲明的靜態(tài)變量,在函數(shù)調(diào)用期間保持其值;在模塊內(nèi)聲明靜態(tài)的變量(但在函數(shù)體之外),能被模塊內(nèi)所有函數(shù)訪問(wèn);在模塊內(nèi)聲明靜態(tài)的函數(shù),只能被模塊內(nèi)其它函數(shù)調(diào)用。如:staticintfunc(intx,inty);當(dāng)一個(gè)C語(yǔ)言工程由多個(gè)程序員進(jìn)行編寫(xiě)時(shí),就不用擔(dān)心自己所定義的函數(shù)與別人

6、定義的重名了。如果在函數(shù)名和函數(shù)類(lèi)型前加extern,則表示此函數(shù)是外部函數(shù),可以被其他文件中的函數(shù)調(diào)用。如:externintfunc(intx,inty)。,File1.c#include/*包含文件FILE2.c中的函數(shù)*/voidmain(void)MyFunction();/*第一次進(jìn)入MyFunction之前,myVar=0*/MyFunction();/*第二次進(jìn)入MyFunction之前,myVar=1*/File2.cvoidMyFunction(void)staticcharmyVar=0;/*本地變量聲明為static*/myVar=myVar+1;/*myVar是本地變

7、量,但它保持了自己的值*/,可變(volatile)變量,volatile的本意是“易變的”,就是該變量會(huì)以編譯器無(wú)法預(yù)知的方式發(fā)生變化,請(qǐng)編譯器不要做優(yōu)化(所有的編譯器的優(yōu)化均假設(shè)編譯器知道變量的變化規(guī)律)。也就是說(shuō)是其值在正常程序流程以外可能改變的變量。在嵌入式系統(tǒng)中,這種情況通過(guò)兩種主要途徑發(fā)生:一是中斷服務(wù)程序,二是硬件動(dòng)作。例如,通過(guò)串口接收到一個(gè)字符,然后串口狀態(tài)寄存器的值會(huì)發(fā)生改變,這完全在程序流程之外發(fā)生。在嵌入式設(shè)備中,最好將所有外設(shè)寄存器聲明為volatile。,例子,由于訪問(wèn)寄存器的速度要快過(guò)RAM,所以編譯器一般都會(huì)作減少存取外部RAM的優(yōu)化。比如:staticinti

8、=0;intmain(void).while(1)if(i)dosomething();/*Interruptserviceroutine.*/voidISR_2(void)i=1;,程序的本意是希望ISR_2中斷產(chǎn)生時(shí),在main當(dāng)中調(diào)用dosomething函數(shù),但是,由于編譯器判斷在main函數(shù)里面沒(méi)有修改過(guò)i,因此可能只執(zhí)行一次對(duì)從i到某寄存器的讀操作,然后每次if判斷都只使用這個(gè)寄存器里面的“i副本”,導(dǎo)致dosomething永遠(yuǎn)也不會(huì)被調(diào)用。如果將將變量加上volatile修飾,則編譯器保證對(duì)此變量的讀寫(xiě)操作都不會(huì)被優(yōu)化(肯定執(zhí)行)。此例中i也應(yīng)該如此說(shuō)明。,Const變量,關(guān)鍵

9、字“const”,C語(yǔ)言中命名最差的關(guān)鍵字,并不表示恒量,而是代表“只讀”。在嵌入式系統(tǒng)中,有很大的不同,這一會(huì)應(yīng)會(huì)明白。const是C+中最常用的幾個(gè)關(guān)鍵字之一,對(duì)確保程序的完整性有著重要的意義。它在調(diào)用者和被調(diào)用者之間傳遞這樣一種信息:Baby,我不會(huì)改變你的,放心吧。Const聲明可用于任何變量,它告訴編譯器將其存貯在ROM代碼。編譯器保留了那個(gè)位置程序存貯器地址。由于位于ROM中,其值不能改變。,Const的用法:,constunsignedshorta;unsignedshortconsta;constunsignedshort*a;unsignedshort*consta;,Con

10、stvolatile變量,現(xiàn)在討論一個(gè)深?yuàn)W的問(wèn)題,一個(gè)變量既能是常量,又能是可變量嗎?如果是這樣,這意味什么,怎樣使用?答案是“能”。這個(gè)修飾符應(yīng)該用于能出乎意料地改變的任何存貯器位置,因此需要volatile限定語(yǔ),由于const該變量是只讀的。,最明顯的例子是硬件狀態(tài)寄存器,象SCI狀態(tài)寄存器SCS1。這個(gè)寄存器包含信號(hào)狀態(tài)標(biāo)志,如發(fā)送空、發(fā)送完成、接收滿(mǎn)以及其它。這是一個(gè)可變寄存器由于這些標(biāo)志的改變依賴(lài)于串行通信的狀態(tài),這也是只讀,由于標(biāo)志不能被程序直接改寫(xiě),它們只對(duì)模塊的狀態(tài)作出響應(yīng)。這個(gè)狀態(tài)寄存器最佳聲明方法是:#defineSCS1(*(constvolatileunsignedc

11、har*)0 x0016),訪問(wèn)固定內(nèi)存位置,與PC機(jī)不同,嵌入式系統(tǒng)通常的特點(diǎn)是需要編程者訪問(wèn)一個(gè)指定的存貯器位置。練習(xí):在某個(gè)項(xiàng)目中需要將絕對(duì)地址0 x2FFA處整型變量的值設(shè)為0 xAA55(編譯器為純粹的ANSI編譯器)。完成這個(gè)任務(wù)的代碼是:int*ptr;ptr=(int*)0 x2FFA;*ptr=0 xAA55;,訪問(wèn)I/O寄存器,一個(gè)普通而有用的形式是使用如下的#define指示:#definePortA(*(volatileunsignedchar*)0 x0000)這種情況下,PortA為地址0 x0000處字符型變量。#define實(shí)際做的是每次發(fā)現(xiàn)PortA時(shí)放置一個(gè)

12、構(gòu)件。也就是說(shuō)在代碼中寫(xiě):PortA=0 x3F,實(shí)際做的就是告訴編譯器0 x0000是一個(gè)volatile-unsigned-char類(lèi)型的指針,它的內(nèi)容等于0 x3F。,數(shù)組,C語(yǔ)言允許程序員用幾種不同方法存取數(shù)組的內(nèi)容。選擇最適合的方法來(lái)存取,可以提高代碼的效率。數(shù)組的訪問(wèn)方法有:硬編碼:Array0=12*UNIT_VOLTS;編譯時(shí)決定地址,執(zhí)行速度快。變址增加Arrayindex+=12*UNIT_VOLTS;快速,比硬編碼靈活。數(shù)組指針*(ArrayPtr+)=12*UNIT_VOLTS;執(zhí)行速度快,可讀性差,可和循環(huán)一起使用。,C語(yǔ)言與匯編語(yǔ)言的混合編程,在絕大多數(shù)場(chǎng)合采用C語(yǔ)

13、言編程可完成預(yù)期的目的,但是對(duì)一些特殊情況進(jìn)行編程時(shí)要結(jié)合匯編語(yǔ)言。匯編語(yǔ)言具有直接和硬件打交道、執(zhí)行代碼的效率高等特點(diǎn),可以做到C語(yǔ)言所不能做到的一些事情:一個(gè)程序中的關(guān)鍵部分對(duì)執(zhí)行速度有很高要求,實(shí)時(shí)性強(qiáng)。用匯編編程可以更有效的利用CPU的寄存器和指令集,用其產(chǎn)生的代碼比用編譯器產(chǎn)生的代碼運(yùn)行更快。對(duì)特定硬件接口的訪問(wèn)。例如對(duì)I/O端口的訪問(wèn),或者用于禁止、啟用中斷系統(tǒng)。因此,選用C語(yǔ)言編程時(shí),還需要夾雜一些匯編程序,通過(guò)這種混合編程的方法將C語(yǔ)言和匯編語(yǔ)言的優(yōu)點(diǎn)結(jié)合起來(lái),這已經(jīng)成為MCU開(kāi)發(fā)最流行的編程方法。,C中使用匯編,目前大多數(shù)MCU系統(tǒng),在C語(yǔ)言中使用匯編語(yǔ)言有兩種情況:一種是匯

14、編程序部分和C程序部分為不同模塊或不同的文件,通常由C程序調(diào)用匯編程序模塊的變量和函數(shù)(也可稱(chēng)為子程序或過(guò)程);另一種是嵌入式匯編,即在C語(yǔ)言程序中嵌入一段匯編語(yǔ)言程序。C語(yǔ)言中嵌入?yún)R編語(yǔ)句:_asmAssemblyInstuction;asm(AssemblyInstruction);asmAssemblyInstructionAssemblyInstruction,C中調(diào)用匯編指令構(gòu)成的子程序:當(dāng)匯編程序和C程序?yàn)椴煌K時(shí),程序一般可分為若干個(gè)C程序模塊和匯編程序模塊,C程序模塊通常是程序的主體框架,而匯編程序模塊通常是若用C語(yǔ)言實(shí)現(xiàn)則效率不高的函數(shù)組成,也可以是已經(jīng)成熟的、沒(méi)有必要再轉(zhuǎn)

15、化成C語(yǔ)言的匯編子程序。在這種混合編程技術(shù)中,關(guān)鍵是參數(shù)的傳遞和函數(shù)的返回值。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯(cuò)。定義匯編子程序,定義格式如下:_子程序名代碼rts,注意:第一,在子程序名前加_;第二,在C代碼中調(diào)用匯編子程序時(shí)可直接調(diào)用:子程序名();第三,在子程序中不能使用映象寄存器的宏定義,只能用它們的直接地址;第四,匯編子程序的編寫(xiě)時(shí),對(duì)于使用過(guò)的寄存器需要進(jìn)行保護(hù)。在匯編中使用C語(yǔ)言在匯編中也可以調(diào)用C代碼中的變量與子程序。使用C代碼中定義的變量:在變量名前加_或%,例如unsignedcharPortA;asm(LDAA%PortA)調(diào)用C代碼中定義的函數(shù):在函數(shù)名前加

16、_,例如:function1();asm(BRA_function1);,C語(yǔ)言的中斷,CodeWarrior編譯器提供了一個(gè)非ANSI的變通的方法,在源碼中直接指定中斷向量號(hào)t。表達(dá)式以interrupt關(guān)鍵字開(kāi)始,接著是中斷向量號(hào),最后是函數(shù)原型。interrupt7voidRTI_ISR(void)/*RTI_ISRFunctionCodes*/9S12所有的中斷源共分成55個(gè)優(yōu)先級(jí)。處在最高優(yōu)先級(jí)的中斷是復(fù)位中斷,它的中斷向量號(hào)為0,第二位的是時(shí)鐘監(jiān)視器復(fù)位中斷,它的中斷向量號(hào)為1,以此類(lèi)推。,標(biāo)準(zhǔn)C庫(kù),標(biāo)準(zhǔn)庫(kù)如stdio.h通常包含在編譯器中。Getchar()、gets()、pri

17、ntf()、putchar()、puts()、scanf()、sprintf()、sscanf()等,都是這些庫(kù)中的常用函數(shù)。當(dāng)給PC機(jī)寫(xiě)這段代碼,printf()缺省的控制臺(tái)是顯示器,但HC12沒(méi)有顯示器作為片外外設(shè),如果這樣調(diào)用庫(kù)函數(shù),哪個(gè)端口用于顯示?什么時(shí)候我們定義它?在哪兒?在嵌入式編程中,通常printf()調(diào)用putchar()執(zhí)行打印,這假定控制臺(tái)缺省為片上串行口(SCI)。如果需要使用這個(gè)功能,則需要修改基礎(chǔ)庫(kù)函數(shù)putchar()才能正確輸出。,C語(yǔ)言入口,在MC9S12的C程序中,程序的入口在什么地方?程序是怎樣起動(dòng)的呢?在工作站或PC上操作系統(tǒng)從磁盤(pán)上裝入程序并建立環(huán)境

18、。而在嵌入式系統(tǒng)中沒(méi)有操作系統(tǒng)。對(duì)程序員來(lái)說(shuō),程序員必須處理程序起動(dòng)的每個(gè)方面。嵌入式應(yīng)用,特別是用C或C+寫(xiě)的代碼,需要一個(gè)起動(dòng)模塊,在起動(dòng)main()之前配置硬件和代碼。通常不可避免地用匯編語(yǔ)言寫(xiě)成,這個(gè)模塊是處理器離開(kāi)復(fù)位狀態(tài)第一個(gè)執(zhí)行的代碼。,C起動(dòng)代碼通常執(zhí)行下列動(dòng)作,(1)關(guān)中斷;(2)將初始化數(shù)據(jù)從ROM復(fù)制到RAM;(3)將未初始化數(shù)據(jù)區(qū)清零;(4)為堆棧定位空間以及初始化堆棧;(5)創(chuàng)建并初始化堆;(6)執(zhí)行構(gòu)造函數(shù)并初始化所有全局變量(僅C+);(7)開(kāi)中斷;,最后,起動(dòng)代碼調(diào)用main(),啟動(dòng)應(yīng)用的剩余部分。當(dāng)然針對(duì)于MC9S12來(lái)說(shuō),啟動(dòng)代碼可以不必這么麻煩??梢灾怀?/p>

19、始化堆,初始化硬件然后直接跳轉(zhuǎn)到main函數(shù),下面是一個(gè)啟動(dòng)代碼的例子,void_Startup()asmLDS0 x1000JSRHardInitJSRmain程序員可以自己編寫(xiě)啟動(dòng)代碼,可以將應(yīng)用程序中的硬件初始化程序都放在啟動(dòng)代碼里面,這樣就可以比較專(zhuān)注地在應(yīng)用程序中做要做的事情。,程序的鏈接與定位,對(duì)于MC9S12單片機(jī)來(lái)說(shuō),由于RAM,EEPROM,寄存器可以重新映射,而且不同型號(hào)的單片機(jī)內(nèi)部FLASH大小也不一樣,這樣程序編譯后存放在什么位置,成了我們必須告訴鏈接器的內(nèi)容,因?yàn)殒溄悠鞑恢滥阌玫膯纹瑱C(jī)RAM放在什么地方,ROM放在什么地方。為了方便管理,CodeWarrior自動(dòng)生

20、成一個(gè).prm文件,此文件用來(lái)管理程序的定位。但是該文件并不一定與用戶(hù)的實(shí)際情況相符,因此在鏈接前,必須自己核對(duì)該文件是否與實(shí)際的硬件相符。看書(shū)的192頁(yè)。,6-3C程序設(shè)計(jì)舉例,例1,對(duì)從RAM中0 x1000地址開(kāi)始的10個(gè)無(wú)符號(hào)字節(jié)型數(shù)進(jìn)行由小到大排序程序分析:可以使用C語(yǔ)言把一個(gè)unsignedchar類(lèi)型的數(shù)組存儲(chǔ)到從0 x1000開(kāi)始的內(nèi)存空間中,數(shù)組的大小為10個(gè)字節(jié),內(nèi)容由程序員自定義。由小到大的排序使用冒泡法完成。unsignedchardata100 x1000,i,j,temp;/*定義數(shù)組*/voidmain(void)for(i=0;idataj+1)temp=dat

21、aj;dataj=dataj+1;dataj+1=temp;for(;);注:若在函數(shù)內(nèi)定義變量,須在函數(shù)體開(kāi)始處定義,例2,求1+2+100的和然后分成低、高字節(jié)存放在0 x1000和0 x1001地址單元中程序分析:求1+2+100可以用100次循環(huán)來(lái)實(shí)現(xiàn),因?yàn)榍蟪鰜?lái)的和不可以用一個(gè)字節(jié)表示,所以必須分成高低字節(jié)存儲(chǔ)。下面先給一個(gè)錯(cuò)誤的程序。unsignedintsum0 x1000=0,i=0;voidmain(void)for(;i=100;i+)sum+=i;for(;),下面給出正確的程序:unsignedcharsum_lowbyte0 x1000=0,sum_highbyte0

22、 x1001=0,i=0;unsignedintsum;voidmain(void)for(;i8;for(;),例3,產(chǎn)生一個(gè)隨機(jī)數(shù),然后返回結(jié)果程序分析:產(chǎn)生隨機(jī)數(shù)可以調(diào)用一個(gè)函數(shù)rand(),使用它可以返回一個(gè)0到32767之間的隨機(jī)數(shù)。然后使用switch-case進(jìn)行處理。注意使用rand()函數(shù),必須包含標(biāo)準(zhǔn)庫(kù)stdlib.h。此頭文件在CodeWarrior安裝目錄“l(fā)ibHC12cinclude”目錄中。#includeinti,j;voidmain(void)i=rand();i=i/10000;switch(i)case0:j=1000;break;case1:j=2000;break;case2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論