本文只要是關(guān)于TMS320C6000的相關(guān)介紹,并著重對TMS320C6000和DSP的編程實(shí)現(xiàn)進(jìn)行了詳盡的闡述。
DSP
現(xiàn)代社會(huì)對數(shù)據(jù)通信需求正向多樣化、個(gè)人化方向發(fā)展。而無線數(shù)據(jù)通信作為向社會(huì)公眾迅速、準(zhǔn)確、安全、靈活、高效地提供數(shù)據(jù)交流的有力手段,其市場需求也日益迫切。正是在這種情況下,3G、4G通信才會(huì)不斷地被推出,但是無論是3G還是4G,未來通信都將離不開DSP技術(shù)(數(shù)字信號(hào)處理器),DSP作為一種功能強(qiáng)大的特種微處理器,主要應(yīng)用在數(shù)據(jù)、語音、視像信號(hào)的高速數(shù)學(xué)運(yùn)算和實(shí)時(shí)處理方面,可以說DSP將在未來通信領(lǐng)域中起著舉足輕重的作用。
為了確保未來的通信能在各種環(huán)境下自由高效地工作,這就要求組成未來通信的DSP要具有非常高的處理信號(hào)的運(yùn)算速度,才能實(shí)現(xiàn)各種繁雜的計(jì)算、解壓縮和編譯碼。而目前DSP按照功能的側(cè)重點(diǎn)不一樣,可以分為定點(diǎn)DSP和浮點(diǎn)DSP,定點(diǎn)DSP以成本低見長,浮點(diǎn)DSP以速度快見長。如果單一地使用一種類型的DSP,未來通信的潛能就不能得到最大程度的發(fā)揮。為了能將定點(diǎn)與浮點(diǎn)的優(yōu)勢集于一身,突破DSP技術(shù)上的瓶頸,人們又推出了一種高級多重處理結(jié)構(gòu)--VLIW結(jié)構(gòu),該結(jié)構(gòu)可以在不提高時(shí)鐘速度的情況下,實(shí)現(xiàn)很強(qiáng)的數(shù)字信號(hào)處理能力,而且它能同時(shí)具備定點(diǎn)DSP和浮點(diǎn)DSP所有的優(yōu)點(diǎn)。為了能推出一系列更高檔的新技術(shù)平臺(tái),人們又開始注重DSP的內(nèi)核技術(shù)的開發(fā),因?yàn)镈SP的內(nèi)核就相當(dāng)于計(jì)算機(jī)的CPU一樣,被譽(yù)為DSP的心臟,大量的算法和操作都得通過它來完成,因此該內(nèi)核結(jié)構(gòu)的質(zhì)量如何,將會(huì)直接影響整個(gè)DSP芯片的性能、功耗和成本。
考慮到未來無線訪問Internet因特網(wǎng)和開展多媒體業(yè)務(wù)的需要,現(xiàn)在美國的Sun公司又開始準(zhǔn)備準(zhǔn)將該公司的拳頭產(chǎn)品--PersonalJava語言嵌入到DSP中,以便能進(jìn)一步提高DSP在處理信號(hào)方面的自動(dòng)化程度和智能化程度。當(dāng)然,在以前DSP中也潛入了其他軟件語言,例如高級C語言,但這種語言在處理網(wǎng)絡(luò)資源以及多媒體信息方面無能為力;而PersonalJava是一種適合個(gè)人網(wǎng)絡(luò)連接和應(yīng)用的Java環(huán)境,基于該環(huán)境的個(gè)人通信系統(tǒng)可以從網(wǎng)絡(luò)和Internet網(wǎng)上下載數(shù)據(jù)和圖像。此外,人們還在研究開發(fā)符合MPEG-4無線解壓縮標(biāo)準(zhǔn)DSP,該壓縮標(biāo)準(zhǔn)將為未來通信傳輸各種多媒體信息提供了依據(jù)。
作為一個(gè)案例研究,我們來考慮數(shù)字領(lǐng)域里最通常的功能:濾波。簡單地說,濾波就是對信號(hào)進(jìn)行處理,以改善其特性。例如,濾波可以從信號(hào)里清除噪聲或靜電干擾,從而改善其信噪比。為什么要用微處理器,而不是模擬器件來對信號(hào)做濾波呢?我們來看看其優(yōu)越性:模擬濾波器(或者更一般地說,模擬電路)的性能要取決于溫度等環(huán)境因素。而數(shù)字濾波器則基本上不受環(huán)境的影響。數(shù)字濾波易于在非常小的寬容度內(nèi)進(jìn)行復(fù)制,因?yàn)槠湫阅懿⒉蝗Q于性能已偏離正常值的器件的組合。一個(gè)模擬濾波器一旦制造出來,其特性(例如通帶頻率范圍)是不容易改變的。使用微處理器來實(shí)現(xiàn)數(shù)字濾波器,就可以通過對其重新編程來改變?yōu)V波的特性。
TMS320C6000
?。裕筛咚傩盘?hào)處理器TMS320C5X和TMS320C6X需要從外部的存儲(chǔ)器(ROM或FLASH)中引導(dǎo)應(yīng)用程序這是開發(fā)中的重點(diǎn)和難點(diǎn)之一,關(guān)系到系統(tǒng)的可靠性和處理速度。以TMS320C6000 DSP為例,介紹了應(yīng)用程序的三種引導(dǎo)方式;以實(shí)際工程為背景詳細(xì)敘述了從ROM中引導(dǎo)程序的實(shí)現(xiàn)方法,并鐘對其中重要的命令文件和用戶引導(dǎo)程序,給出了相應(yīng)的示例文件和程序。 關(guān)鍵詞:TMS320C6000 DSP CMD 引導(dǎo)1 TMS320C6000 DSP硬件結(jié)構(gòu)概述TMS320C6000是TI公司生產(chǎn)的TMS320系列產(chǎn)品中新一代高性能的DSP芯片,適用于高速數(shù)字信號(hào)處理。TMS320C6000主要由三個(gè)部分組成:CPU內(nèi)核、外設(shè)和存儲(chǔ)器。CPU中8個(gè)功能單元可以并行工作,這些功能單元被分成類似的兩組,每組由4個(gè)基本功能單元組成。CPU有兩組寄存器,每組寄存器由16個(gè)32位寄存器組成。由于在運(yùn)行期間不做硬件數(shù)據(jù)相關(guān)性檢查,所以程序運(yùn)行時(shí)可以同時(shí)執(zhí)行8條指令,極大地提高了芯片處理速度,這使得該系列的芯片在電子測量、測控、圖像、雷達(dá)、聲納和軟件無線電等領(lǐng)域得到了廣泛的應(yīng)用。
2 加電后DSP的運(yùn)行過程系統(tǒng)加電后,RESET信號(hào)為低,芯片復(fù)位。在RESET信號(hào)上升沿處,鎖存BOOTMODE[4:0]信號(hào),借以決定芯片的存儲(chǔ)器映射方式、地址0處的存儲(chǔ)器類型以及復(fù)位后芯片的自舉模式,復(fù)位結(jié)束后,芯片從存儲(chǔ)器的0地址開始執(zhí)行指令。TMS320C6000器件可以設(shè)置成三種自舉方式,其加載過程分別敘述如下:(1)不加載。CPU直接從存儲(chǔ)器的0地址處開始執(zhí)行指令。如果系統(tǒng)中使用的是SDRAM,那么CPU會(huì)先掛起,直到SDRAM的初始化完成。TMS320C621X/C671X不具有這類方式。(2)ROM加載。位于外部空間的ROM中的程序首先通過DMA/EDMA搬入地址0處。盡管加載過程是在芯片外部被復(fù)位信號(hào)釋放以后才開始的,但是當(dāng)芯片仍處于內(nèi)部復(fù)位保持時(shí),就開始了上述的傳輸過程了。用戶可以指定外部ROM的存儲(chǔ)寬度,EMIF會(huì)自動(dòng)將相鄰的8bit/16bit數(shù)據(jù)合并成32bit。ROM中的程序必須以little endian的格式存儲(chǔ)。
TMS320C6000 DSP的編程實(shí)現(xiàn)
開發(fā)DSP系統(tǒng)應(yīng)用板,最終要脫離仿真器而獨(dú)立運(yùn)行,這時(shí)就需要一個(gè)能在斷電后保存程序及初始化數(shù)據(jù)的存儲(chǔ)器。系統(tǒng)上電時(shí),由引導(dǎo)程序?qū)ⅲ模樱械膽?yīng)用程序從該存儲(chǔ)器引導(dǎo)到DSP應(yīng)用板上的高速存儲(chǔ)器(如內(nèi)部SRAM,SDRAM等)中。由于FLASH具有電信號(hào)刪除功能?且刪除速度快,集成度高,因而已成為此種存儲(chǔ)器的首選。
將用戶程序代碼寫入FLASH的方法有兩種:第一種是用專門的FLASH編程器實(shí)現(xiàn),第二種是通過系統(tǒng)微處理器與FLASH的接口來實(shí)現(xiàn)。第一種方法的主要優(yōu)點(diǎn)是使用方便可靠,但要求FLASH只能是雙列直插等一些可插拔的封裝形式,由于芯片制造工藝的提高,芯片的集成度越來越高,FLASH正向小型化、貼片式發(fā)展,從而使表面貼裝或PLCC封裝的FLASH難以利用編程器編程。第二種方法克服了第一種方法的缺點(diǎn),且使用靈活,因而在DSP系統(tǒng)中的應(yīng)用日益廣泛。
由于FLASH的存取速度較慢,寫入FLASH的程序?qū)⒃谙到y(tǒng)上電時(shí)被DSP裝載到快速的存儲(chǔ)器中運(yùn)行,這個(gè)過程稱為boot loader。不同的DSP有不同的引導(dǎo)方式,本文將以TMS320C6713為例來介紹TMS320C6000系列的boot loader方式。
?。薄。疲蹋粒樱鹊墓ぷ鞣绞郊霸谙到y(tǒng)編程
目前,市場上的FLASH型號(hào)很多,但工作方式大體相同,下面以AM29LV160D為例進(jìn)行介紹。
?。保?AM29LV160D FLASH存儲(chǔ)器簡介
AM29LV160D是AMD公司生產(chǎn)的2M×8bit/1M×16bit FLASH存儲(chǔ)器,它的數(shù)據(jù)寬度為8位、16位可選,采用3.3V供電,完全兼容JEDEC標(biāo)準(zhǔn),并支持在系統(tǒng)編程,用戶只需向其內(nèi)部的命令寄存器寫入命令序列即可實(shí)現(xiàn)部分擦除、全部擦除、數(shù)據(jù)寫入等功能;同時(shí)可提供硬件和軟件方法來檢查FLASH的操作執(zhí)行情況。
圖1
1.2 編程方法
對FLASH的在系統(tǒng)編程就是通過一定的編程命令序列來控制FLASH的工作方式,這些命令序列是一些特定字符的組合,只要向FLASH中的特定寄存器以特定的順序輸入這些字符即可進(jìn)入相應(yīng)的編程模式。AM29LV160D中的主要命令序列和寫入地址如圖1所示。具體說明如下:
●復(fù)位命令序列:對FLASH中任一地址寫入“F0”,即可實(shí)現(xiàn)復(fù)位。
● 自動(dòng)選擇模式:此模式主要用于編程器編程時(shí),由編程器根據(jù)從數(shù)據(jù)線DQ7~DQ0讀出的識(shí)別碼自動(dòng)配置編程邏輯,當(dāng)然也可以通過命令序列在在系統(tǒng)情況下將自動(dòng)選擇碼讀出。
●編程命令序列:程序可以以字節(jié)方式或字方式寫入,這主要根據(jù)FLASH外部引腳BYTE的狀態(tài)而定。
●芯片擦除命令序列:FLASH編程時(shí)應(yīng)先執(zhí)行擦除命令,這是因?yàn)榫幊讨噶钪荒軐?shù)據(jù)由1變?yōu)椋埃粗畡t不行。
● 扇區(qū)擦除命令序列:為了編程方便及保護(hù)有用數(shù)據(jù),數(shù)據(jù)擦除可以只擦除某些無用的扇區(qū)。
● 擦除暫停和恢復(fù)命令序列:這個(gè)命令序列只在進(jìn)行扇區(qū)擦除時(shí)有效,它允許編程者中斷一個(gè)扇區(qū)的擦除操作,接著從沒有被擦除的扇區(qū)讀出或?qū)懭霐?shù)據(jù)。
●寫入命令:也分為字節(jié)模式和字模式,分別對應(yīng)FLASH的8位和16位工作方式,具體為哪種模式,可由FLASH的BYTE腳的輸入來決定,低電平為字節(jié)模式,高電平為字模式。
在對FLASH進(jìn)行編程時(shí),FLASH提供硬件和軟件機(jī)制來獲得FLASH的狀態(tài),以確定數(shù)據(jù)寫入或擦除操作是否完成。硬件方法主要是利用FLASH的外部引腳RY/BY的輸出信號(hào)在命令序列的最后一個(gè)寫脈沖(WE)的上升沿之后有效。當(dāng)該輸出為低電平時(shí),表示FLASH正在編程或擦除中,而當(dāng)該輸出腳為高電平時(shí),即表示編程或擦除已完成。將此引腳與TMS320C671x系列DSP的ARDY引腳相連,即可實(shí)現(xiàn)硬件的自動(dòng)編程或擦除的完成判斷。C6000系列DSP與FLASH的連線圖如圖2所示。
軟件方法是利用從FLASH數(shù)據(jù)線讀取的數(shù)據(jù)來判斷FLASH的狀態(tài),讀取數(shù)據(jù)中的主要判斷位為DQ2、DQ3、DQ5、DQ6和DQ7,它們之間的相互組合提供了幾種軟件判斷狀態(tài)的方法,應(yīng)用較多且較為簡便的方法是在命令序列寫入后,如果寫入的是編程命令,則選擇一個(gè)地址,并循環(huán)讀取這個(gè)地址的數(shù)據(jù)。若裝置仍處于編程狀態(tài)之中,DQ7輸出為寫入數(shù)據(jù)的補(bǔ)碼,而在編程完成后,DQ7輸出的是所選地址上的正確數(shù)據(jù)。如果寫入的是擦除命令,那么?當(dāng)裝置處于擦除狀態(tài)時(shí),則DQ7輸出為0,若擦除完成或擦除被中斷?DQ7輸出為1。選擇地址時(shí)應(yīng)注意:若地址所在區(qū)域?qū)儆冢疲蹋粒樱戎械谋Wo(hù)區(qū)域,則DQ7輸出的FLASH狀態(tài)信息有效,有效時(shí)間只能持續(xù)大約1μs,然后輸出正確數(shù)據(jù)。而擦除命令擦除的范圍如果包括FLASH中的保護(hù)區(qū)域,那么命令將被忽略,此時(shí)DQ7輸出狀態(tài)信息有效,持續(xù)時(shí)間大約100μs。對FLASH的操作有時(shí)會(huì)出錯(cuò),出錯(cuò)時(shí),FLASH將處于不正常狀態(tài),DQ7可能永遠(yuǎn)也不會(huì)輸出地址上的正確數(shù)據(jù),此時(shí)就需讀?。模眩档妮敵鲂畔ⅲ魹椋眲t表示操作失敗。其軟件流程圖如圖3所示。
對FLASH的編程既可以用匯編語言,也可以用C語言,以下給出部分C代碼。該程序代碼可采用TI公司專門用于TI公司系列DSP編程的Code Com-poser Studio 編程工具進(jìn)行編寫。
?。觯铮椋?erase_flash(short * flash_ptr)
{
?。螅瑁铮颍?* ctrl_addr1=(short *)((int)flash_ptr+(0x555<<2));
?。颂帲埃担担档刂纷笠苾晌?,按16位存儲(chǔ)器來看,本來只需左移一位,但在計(jì)算式中?地址flash_ptr是先轉(zhuǎn)換成int型再計(jì)算的,而要寫入命令的地址0x555為16位地址,所以需乘2,因此應(yīng)當(dāng)再左移一位*/
?。螅瑁铮颍?* ctrl_addr2=(short *)((int)flash_ptr+(0x2aa<<2));?
* ctrl_ addr1=0x00aa;
?。?ctrl_addr2=0x0055;
?。?ctrl_addr1=0x0080;
?。?ctrl_addr1=0x00aa;
* ctrl_addr2=0x0055;
* ctrl_addr1=0x0010;
}
?。觯铮椋?program_flash(short * source_ptr?short * flash ptr,short length)
{
?。螅瑁铮颍?i?
?。螅瑁铮颍?* ctrl_addr1=(short *)((int)flash_ptr+(0x555<<2));??
short * ctrl_addr2=(short *)((int)flash_ptr+0x2aa<<2));?
?。妫铮颍ǎ椋剑?i<length;i++)
{
?。?ctrl_addr1=0x00aa;
?。?ctrl_addr2=0x0055;
?。?ctrl_addr1=0x00a0;
?。?flash_ptr++=*source_ptr?
}
}
在上面的程序中,對FLASH的命令序列的寫入地址有一個(gè)左移指令,即若應(yīng)寫入命令的寄存器地址為0x555,實(shí)際編程時(shí),應(yīng)先對0x555左移若干位,然后再對得到的地址寫入命令。這是因?yàn)?,TMS320C6000系列DSP為32位DSP,它的外部地址總線引腳的最低位(LSB)為EA2,即輸出地址的最低位為實(shí)際地址的第2位,而不會(huì)輸出第1位和第0位,但實(shí)際外接的FLASH可以是8位、16位、32位不等。如果連接非32位存儲(chǔ)器,在讀數(shù)據(jù)時(shí)?DSP的外部存儲(chǔ)器接口(EMIF)會(huì)自動(dòng)將實(shí)際地址左移若干位,以使外部地址總線引腳的最低位EA2根據(jù)FLASH位數(shù)的不同輸出實(shí)際地址的第0位或第1位,然后再將幾次讀入的數(shù)據(jù)合成一個(gè)32位的值(外接FLASH的位數(shù)可以在EMIF寄存器中設(shè)置),而在寫數(shù)據(jù)時(shí),就需要編程者手動(dòng)進(jìn)行移位,具體方法是?外接8位存儲(chǔ)器時(shí)左移2位,外接16位存儲(chǔ)器時(shí)左移1位。
?。病∮茫疲蹋粒樱葘?shí)現(xiàn)DSP的程序自引導(dǎo)
TMS320C6000系列DSP包括多個(gè)型號(hào),各個(gè)型號(hào)的程序自引導(dǎo)方法一致,下面以TMS320C6713為例來介紹程序自引導(dǎo)的實(shí)現(xiàn)過程。
?。玻?TMS320C6713DSP簡介
?。裕停樱常玻埃茫叮罚保呈牵裕晒就瞥龅模裕停樱常玻埃茫叮罚盗懈↑c(diǎn)DSP中最新的一種芯片。TMS320C6713每周期可以執(zhí)行8條32位指令;支持32/64位數(shù)據(jù);具有最高225MHz、4.4ns指令周期的運(yùn)行速度和1800MIPS或1350MFLOPS的處理能力;同時(shí)是有強(qiáng)大的外設(shè)支持能力;外部存儲(chǔ)器接口(EMIF)可以很方便地和SDRAM、SBSRAM、FLASH、SRAM等同步和異步存儲(chǔ)器相連,16位HPI接口可以和各種處理器?如PC、POWERPC等?接口;另外還有優(yōu)化的多通道緩存串口和多通道音頻串口(僅TMS320C6713),這些外部接口使設(shè)計(jì)人員可以很容易實(shí)現(xiàn)自己的應(yīng)用系統(tǒng)。
?。玻?TMS320C6713程序自引導(dǎo)功能的實(shí)現(xiàn)
斷電時(shí)用慢速ROM或FLASH存儲(chǔ)程序和初始化數(shù)據(jù),上電后引導(dǎo)到內(nèi)部或外部快速RAM中運(yùn)行是現(xiàn)在普遍采用的一種設(shè)計(jì)DSP電路板的方法,該方法可靠、方便、靈活且成本較低。但對于不同的DSP有不同的程序自引導(dǎo)方法。本文只討論TMS320C6000系列DSP的引導(dǎo)方法。
和以往TI公司的DSP(如3x、4x)采用引導(dǎo)表由固化在DSP內(nèi)部的引導(dǎo)程序?qū)崿F(xiàn)程序的自引導(dǎo)不同,TMS320C6000系列DSP采用的是一種新的引導(dǎo)方法,對于TMS320C6713,上電后,若選擇從EMIF引導(dǎo)程序,則DSP自動(dòng)將位于地址空間CE1(0x90000000~0x9FFFFFFF)開頭的1kB代碼傳輸?shù)降刂房臻g0處。它的數(shù)據(jù)傳輸采用默認(rèn)時(shí)序,用戶可以選擇外部程序存儲(chǔ)器的寬度(8位/16位/32位),然后由EMIF自動(dòng)將幾次讀入的數(shù)據(jù)合成32位數(shù)據(jù)。傳輸由DSP中的EDMA通道以單幀的形式自動(dòng)進(jìn)行,傳輸完成后,程序從地址0處開始運(yùn)行。因此,要在TMS320C671x中實(shí)現(xiàn)基于FLASH的自引導(dǎo)功能,必須將FLASH配置在DSP的CE1地址空間中。
以上工作均由DSP自動(dòng)完成。很明顯,自動(dòng)傳輸?shù)拇a并不能滿足絕大多數(shù)編程者對代碼長度的要求,因此可在這段代碼中加入數(shù)據(jù)傳輸功能,從而將實(shí)際工作中遠(yuǎn)大于1kB的代碼由FLASH中讀入到用戶指定的存儲(chǔ)空間,然后再將程序跳到實(shí)際有用的代碼處運(yùn)行。對FLASH編程并實(shí)現(xiàn)程序自引導(dǎo)的具體過程如下:
?。ǎ保Γ模樱姓_\(yùn)行程序的處理
Code Composer Studio(CCS)是TI公司開發(fā)的用于DSP產(chǎn)品的軟件開發(fā)工具。由CCS得到的代碼為目標(biāo)文件格式(COFF),這種格式文件不能直接寫入FLASH,而要先用其它語言(如C)編寫文件,然后由轉(zhuǎn)換工具進(jìn)行轉(zhuǎn)化。
在COFF格式下,程序被分成很多段(包括程序段、初始化數(shù)據(jù)段、未初始化數(shù)據(jù)段、自定義段等),每段都占據(jù)連續(xù)的存儲(chǔ)空間,段與段之間相互獨(dú)立。另外,在COFF文件中,除了段內(nèi)的用戶程序和數(shù)據(jù)外,還包含一些額外的信息,其中有COFF文件的版本、段的數(shù)量、段的長度和起始地址等,分析清楚這些信息,就可以編寫自己的文件轉(zhuǎn)換工具了。具體方法是:讀入COFF文件,根據(jù)格式分析該文件的內(nèi)容,再把用戶程序和數(shù)據(jù)部分提取出來,仍分成一個(gè)個(gè)段,并在每個(gè)段前加入起始位置和段長度信息,同時(shí)在最后一個(gè)段的末尾加上結(jié)束標(biāo)志,最后寫入一個(gè)新的文件。在此過程中,因?yàn)椋茫希疲莆募淖珠L為32bit,而FLASH寬度可能為8bit或16bit,因而要在兩者之間進(jìn)行手工轉(zhuǎn)化。
?。ǎ玻┚帉懀猓铮铮舫绦?/p>
?。猓铮铮舫绦虻拇笮〔荒艹^1kB,它主要完成以下幾個(gè)功能:第一是配置DSP的EMIF寄存器,然后從FLASH中把各個(gè)段中的程序和數(shù)據(jù)拷貝到用戶指定的存儲(chǔ)器物理地址中,同時(shí)跳到程序的入口點(diǎn)。在此應(yīng)當(dāng)注意:C程序的入口點(diǎn)并非main(),而是c_int00,這是因?yàn)樵谡{(diào)用main()函數(shù)之前,系統(tǒng)必須先建立C語言的運(yùn)行環(huán)境。如為系統(tǒng)堆棧定義.stack段、建立初始化堆棧和禎指針、初始化全局和靜態(tài)變量等。另外,由于boot程序本身也是COFF文件格式,所以也需格式轉(zhuǎn)換。
(3)編寫FLASH燒寫程序
FLASH的燒寫程序可以根據(jù)前面的介紹來編寫,但要注意,應(yīng)將boot程序?qū)懭耄茫牛笨臻g開始的1kB中,而將DSP正常工作程序?qū)懭耄保耄乱院蟮牡刂房臻g中。
?。场〗Y(jié)束語
本文介紹了FLASH在系統(tǒng)編程和基于FLASH實(shí)現(xiàn)TMS320C6713 DSP程序自引導(dǎo)的過程。實(shí)際上,TMS320C6000系列DSP中其它類型(如C6201、C6701等)的boot也與本文所述相同,因此,完全可以相互借鑒。
結(jié)語
關(guān)于TMS320C6000的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評論
查看更多