在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > CISC處理器調(diào)試系統(tǒng)的設(shè)計實現(xiàn),詳細(xì)軟硬件架構(gòu)、流程、代碼

            CISC處理器調(diào)試系統(tǒng)的設(shè)計實現(xiàn),詳細(xì)軟硬件架構(gòu)、流程、代碼

            作者: 時間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201706/348714.htm
            1. 前言

            隨著嵌入式的不斷發(fā)展,在各個領(lǐng)域的應(yīng)用越來越廣泛,由于嵌入式系統(tǒng)的專用性很強,所以針對不同的應(yīng)用的嵌入式軟件的開發(fā)在嵌入式系統(tǒng)開發(fā)中所占的比重越來越大。嵌入式系統(tǒng)的開發(fā)主要包括兩個部分硬件設(shè)計和軟件設(shè)計。軟件設(shè)計的步驟主要有源碼編輯、源碼編譯、嵌入式操作系統(tǒng)的配置、程序下載和調(diào)試。由于嵌入式系統(tǒng)的資源有限不可能在嵌入式系統(tǒng)的硬件平臺上集成自身的軟件開發(fā)環(huán)境,所以嵌入式的軟件開發(fā)的通常采用交叉編譯和調(diào)試的方式。調(diào)試是保證程序質(zhì)量的重要手段之一,可以驗證程序是否滿足預(yù)期的要求和檢查程序存在的bug。交叉的開發(fā)方式采用宿主機和目標(biāo)機的結(jié)構(gòu)。宿主機一般采用PC機,將嵌入式系統(tǒng)的軟件開發(fā)環(huán)境配置在PC機上。宿主機和目標(biāo)機之間通過串口、并口和網(wǎng)線等建立連接,不僅僅是物理連接還有邏輯連接。在交叉開發(fā)過程中宿主機和目標(biāo)機通過這種連接進(jìn)行交互,完成目標(biāo)程序的編譯下載和調(diào)試。

            嵌入式系統(tǒng)的開發(fā)主要針對硬件系統(tǒng)中的微處理器的嵌入式軟件的開發(fā),嵌入式系統(tǒng)的軟件調(diào)試也是針對微處理器的調(diào)試?,F(xiàn)在微電子技術(shù)飛速發(fā)展,處理器生產(chǎn)工藝也不斷提高,微處理器芯片的集成度更高、運行頻率更高,所以對調(diào)試的要求更高。單單采用PC機上的軟件調(diào)試器和軟件調(diào)試代理已經(jīng)很難適應(yīng)這些新的變化,將調(diào)試功能轉(zhuǎn)移到硬件部分為嵌入式軟件的開發(fā)提供更好的保障和支持,實現(xiàn)成本也比較低。微處理器芯片中集成支持調(diào)試的硬件邏輯已經(jīng)逐漸成為趨勢。

            在板級的測試和調(diào)試領(lǐng)域,為了更好的支持對電路物理節(jié)點的訪問,JTAG標(biāo)準(zhǔn)已經(jīng)被很多芯片生產(chǎn)廠商所采用。JTAG標(biāo)準(zhǔn)最早的提出是為了檢測印刷電路板的元件焊接問題,通過在電路中引入邊界掃描單元所組成的邊界掃描鏈來完成對電路節(jié)點的訪問?,F(xiàn)在JTAG標(biāo)準(zhǔn)也被應(yīng)用于嵌入式軟件的調(diào)試過程中,用于與硬件調(diào)試邏輯交互提供通用的調(diào)試接口。

            1. 總體方案設(shè)計

            圖1 系統(tǒng)結(jié)構(gòu)框圖

            整個分為四部分PC機上層控制臺,USB-JTAGOCD(On Chip Debugger)以及調(diào)試的目標(biāo)處理器CPU。

            1. 系統(tǒng)硬件

            1. USB傳輸

            USB是以串行傳輸?shù)姆绞絺鬏敂?shù)據(jù),首先使用FTDI公司的USB串并轉(zhuǎn)換芯片F(xiàn)T245R將USB串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),然后USB-JTAG根據(jù)接收到的數(shù)據(jù)按照J(rèn)TAG協(xié)議輸出TAP信號。USB-JTAG的結(jié)構(gòu)如圖1所示。

            圖 1 協(xié)議轉(zhuǎn)換器的結(jié)構(gòu)

            USB-JTAG協(xié)議轉(zhuǎn)換器與FT245R之間除了有8位的數(shù)據(jù)Data[7:0]的傳輸,還有四個握手信號,分別是nRXF、nTXE、nRD和WR,如圖1所示。nRXF是讀FIFO_TX允許信號,nTXE是寫FIFO_RX允許信號,還有讀FIFO_TX信號nRD和寫FIFO_RX信號WR。當(dāng)nRXF為低電平時說明FIFO_TX不為空,USB-JTAG協(xié)議轉(zhuǎn)換器可以從中讀出數(shù)據(jù),此時USB-JTAG協(xié)議轉(zhuǎn)換器可以通過發(fā)送nRD信號從FIFO_TX讀取數(shù)據(jù);同樣當(dāng)nTXE信號有效的時候表明FIFO_RX還有空間,此時USB-JTAG協(xié)議轉(zhuǎn)換器可以使WR信號有效往FIFO_RX中寫入數(shù)據(jù)。USB-JTAG協(xié)議轉(zhuǎn)換器對FIFO_TX和FIFO_RX的讀寫操作都是以字節(jié)為單位。

            FT245R內(nèi)部有兩個FIFO分別為FIFO TX Buffer和FIFO RX Buffer,F(xiàn)IFO TX Buffer負(fù)責(zé)存放接收從PC機發(fā)送來的數(shù)據(jù),F(xiàn)IFO RX Buffer負(fù)責(zé)接收從USB-JTAG協(xié)議轉(zhuǎn)換器發(fā)送來的數(shù)據(jù),為了區(qū)分稱之為FIFO_TX和FIFO_RX。FT245R芯片的內(nèi)部結(jié)構(gòu)如圖2所示。

            圖2 FT245R芯片的內(nèi)部結(jié)構(gòu)

            1. SPARTAN-3E開發(fā)板

            采用xilinx的SPARTAN-3E開發(fā)板,將目標(biāo)處理器與的硬件邏輯還有協(xié)議轉(zhuǎn)換器中的JTAG信號的生成功能都集成到該開發(fā)板的FPGA上。系統(tǒng)如圖3所示。

            圖3

            1. 結(jié)構(gòu)

            圖4 片上調(diào)試器結(jié)構(gòu)

            TAP控制器掌管JTAG協(xié)議的狀態(tài)機,控制OCD與USB-JTAG協(xié)議轉(zhuǎn)換器之間的數(shù)據(jù)和指令的移入移出。TAP(Test Access Port)包含四個引腳用來控制指定的操作。這四個引腳分別為TMS,TCK,TDI,TDO。TAP控制器內(nèi)部采用標(biāo)準(zhǔn)的JTAG協(xié)議狀態(tài)機來控制TAP的數(shù)據(jù)通路,包括指令寄存器掃描鏈和數(shù)據(jù)寄存器掃描鏈的選擇以及掃描鏈數(shù)據(jù)的傳輸。

            寄存器包括邊界掃描寄存器、BYPASS寄存器、斷點寄存器和指令寄存器。邊界掃描寄存器在此處是為讀取處理器輸入輸出引腳預(yù)留的擴展寄存器;BYPASS寄存器是位寬為1的寄存器,當(dāng)在多個器件或模塊串聯(lián)的時候用該寄存器來旁路當(dāng)前器件或模塊;指令寄存器主要用來存放對CPU進(jìn)行調(diào)試的相應(yīng)調(diào)試指令。

            掃描鏈包括寫PC掃描鏈和自定義數(shù)據(jù)掃描鏈。寫PC掃描鏈?zhǔn)菫榱藢懭隤C值而設(shè)計的掃描鏈,而通過自定義數(shù)據(jù)掃描鏈可以讀出處理器內(nèi)部的狀態(tài)和數(shù)據(jù)。

            處理器運行控制模塊是片上調(diào)試器的核心部件,負(fù)責(zé)調(diào)試指令的譯碼以及讀CPU寄存器、復(fù)位、斷點設(shè)置檢測和處理器運行控制,還有寫CPU內(nèi)部程序計數(shù)器PC等調(diào)試功能的實現(xiàn)。

            1. 處理器運行控制模塊

            處理器運行控制模塊是片上調(diào)試器的核心部件,負(fù)責(zé)指令譯碼和根據(jù)當(dāng)前指令和CPU的運行狀態(tài)進(jìn)行機器指令或者微指令的單步和斷點的判定,并且根據(jù)判定結(jié)果控制CPU的運行。指令譯碼就是根據(jù)PC上層平臺發(fā)送到指令寄存器中的指令來產(chǎn)生相應(yīng)的控制信號,直接通過這些控制信號控制CPU的運行、停止和復(fù)位等。設(shè)計了9條指令,分別為:

            1)SREAD:CPU停止,并且此時選通CPU內(nèi)部掃描寄存器數(shù)據(jù)鏈讀出CPU內(nèi)部主要寄存器的值。

            2)STEP:微指令的單步,CPU運行一條微指令然后停下來。

            3)MSTP:機器指令的單步,CPU運行一條機器指令然后停下來。

            4)BPSET:斷點設(shè)置,該指令只負(fù)責(zé)產(chǎn)生斷點設(shè)置所需要的相應(yīng)控制信號,并不負(fù)責(zé)斷點數(shù)據(jù)的寫入。實際的斷點數(shù)據(jù)是用戶通過PC機的上層工具設(shè)置以后,再進(jìn)行一個BPR的數(shù)據(jù)寫入來完成的。

            5)RUN:CPU運行指令。

            6)BRUN:斷點運行,在斷點設(shè)置完成以后,發(fā)送該指令來使CPU運行。

            7)RESET:復(fù)位指令,使CPU復(fù)位。

            8)WPC:寫PC指令,為用戶提供對CPU內(nèi)部程序計數(shù)器PC值進(jìn)行寫入的功能,以滿足某些用戶的特殊需求。

            9)STOP:CPU停止指令。

            上面所描述的9條指令, 其中BPSET和BPRUN指令是兩條相互依賴的調(diào)試指令,兩條指令聯(lián)合完成斷點調(diào)試功能。其他的指令都是一條指令完成相應(yīng)的調(diào)試功能。

            1. 斷點設(shè)置和檢測

            首先要通過外部來設(shè)置斷點值,硬件部分要設(shè)計一個斷點寄存器BPR用來存放用戶設(shè)置的機器指令斷點或者微指令斷點值,該寄存器位寬為24,其中低18位為有效數(shù)據(jù)位,高6位作為預(yù)留的擴展位。通過邊界掃描的方式將斷點值串行的移入到斷點寄存器BPR中。

            BPR[17:16]兩位為標(biāo)志位用來進(jìn)行斷點類型的區(qū)分,當(dāng)BPR[17:16]=00時表明要寫入的是微指令斷點,此時BPR[8:0]為要寫入的微指令的斷點值即斷點微地址;當(dāng)BPR[17:16]=01時表示要寫入的是機器指令斷點,此時BPR[15:0]為要寫入的機器指令的斷點值即內(nèi)存機器指令的地址。

            斷點的檢測首先根據(jù)標(biāo)志位來區(qū)分?jǐn)帱c類型,是微指令斷點還是機器指令斷點。當(dāng)標(biāo)志位為00時,將斷點值與微指令地址進(jìn)行比較,其值一致時產(chǎn)生斷點觸發(fā)信號;當(dāng)標(biāo)志位為01時,將斷點值與PC寄存器中的機器指令地址進(jìn)行比較,如果一致同樣產(chǎn)生斷點觸發(fā)信號。

            1. PC值的寫入

            處理器調(diào)試的過程中,為了能夠隨時控制處理器所要執(zhí)行的指令,需要設(shè)置PC(程序計數(shù)器)值即所要執(zhí)行的指令的地址。采用邊界掃描技術(shù)來實現(xiàn)該功能,設(shè)計一條掃描鏈通過該掃描鏈將要設(shè)置的PC值寫入到PC寄存器中,掃描鏈的結(jié)構(gòu)如圖5所示。

            圖5 寫PC掃描鏈

            由于內(nèi)部的寄存器在寫入和讀出時都有相應(yīng)的使能信號,所以在寫入PC值的時候需要使PC的使能信號PCce有效,而這些寄存器的使能信號的產(chǎn)生是由微指令譯碼得來的,如果要修改微指令會影響到其他寄存器的使能控制存在一定的風(fēng)險。

            為了解決這個問題可以有兩種方法可供選擇:

            1、將uIR數(shù)據(jù)讀出,PC寫操作完成以后再寫回

            該方法是先將uIR內(nèi)部的內(nèi)容讀出保存好,然后寫入帶有PC寄存器使能控制信號微指令,當(dāng)PC值正確寫入以后再將原來保存的uIR的值還原到uIR寄存器中。

            2、引入偽微指令寄存器用來在寫入PC值取代uIR輸出微指令

            該方法是在微指令寄存器uIR到微指令譯碼模塊uIR_Decoder之間加入一個掃描寄存器BSC_uIR,稱之為偽微指令寄存器,這個寄存器在保證不影響uIR的前提下產(chǎn)生PCce信號。當(dāng)寫入PC值時首先選中該掃描鏈,然后將要寫入PC的數(shù)據(jù)移入BSC_PC_A中,PCce有效則將BSC_PC_A中數(shù)據(jù)更新到PC中,完成PC的寫操作。

            第一種方法操作起來比較繁瑣并且對軟件的設(shè)計要求也比較高,在PC機和硬件平臺指令就會存在反復(fù)傳送數(shù)據(jù)的局面增加了數(shù)據(jù)出錯的幾率。而第二種方法實施起來比較簡單,并且只要將需要的微指令和要寫入的PC值一起進(jìn)行一次寫操作就可以完成,還保證了uIR寄存器中原有的微指令保持不變。因此本文采用了第二種方法。

            1. 處理器內(nèi)部狀態(tài)讀出

            處理器內(nèi)部寄存器反映處理器內(nèi)部運行的狀態(tài)和當(dāng)前一些主要數(shù)據(jù),在調(diào)試過程中必須能夠?qū)⑦@些數(shù)據(jù)讀回給用戶。這樣就需要在處理器內(nèi)部構(gòu)建一條自定義數(shù)據(jù)掃描鏈,當(dāng)執(zhí)行處理器內(nèi)部數(shù)據(jù)讀出調(diào)試功能時先選中該掃描鏈,然后將該掃描鏈內(nèi)部數(shù)據(jù)讀回到PC機上層控制臺。處理器內(nèi)部自定義數(shù)據(jù)掃描鏈的結(jié)構(gòu)如圖6所示。

            圖 6 自定義數(shù)據(jù)掃描鏈

            構(gòu)建數(shù)據(jù)掃描鏈可以考慮在在寄存器的輸入或者輸出線上加邊界掃描單元的方法來捕獲數(shù)據(jù),而不直接對寄存器本身進(jìn)行操作,這樣就將片上調(diào)試器對CPU的侵入性降到最低,保證了CPU內(nèi)部數(shù)據(jù)通路的獨立性。

            由于在處理器內(nèi)部寄存器的值的更新都有嚴(yán)格的時序控制,所以將掃描寄存器加在寄存器的輸入線和輸出線上是有區(qū)別的。這些寄存器輸入線上的數(shù)據(jù)要存入到寄存器中在下一個時鐘周期輸出才會生效,例如IR中指令輸出到微控制部件去譯碼才會起作用。所以為了要了解當(dāng)前正在起作用的這些寄存器的值,另外輸入線上的值隨時都可能變化,由于這兩個原因在輸入線上引入邊界掃描寄存器才可以真實的反映處理器當(dāng)前的狀態(tài)和寄存器的值。

            1. 系統(tǒng)軟件設(shè)計

            不僅需要底層硬件的良好支持,還需要有一個便于用戶使用的PC機上層的控制臺。該控制臺主要功能是發(fā)送數(shù)據(jù)到串并轉(zhuǎn)換芯片F(xiàn)T245R,數(shù)據(jù)經(jīng)過FT245R轉(zhuǎn)換以后變?yōu)椴⑿械?bit數(shù)據(jù)送入到USB-JTAG協(xié)議轉(zhuǎn)換器,協(xié)議轉(zhuǎn)換器將數(shù)據(jù)進(jìn)行解析來相應(yīng)的產(chǎn)生TAP信號。

            PC機通過USB電纜與FT245R相連,所以PC機只要將數(shù)據(jù)發(fā)送到FT245R任務(wù)就完成了,其他的都由下面的硬件來實現(xiàn)。采用C++builer6.0為PC機控制臺的開發(fā)平臺,添加FT245R廠商提供的動態(tài)鏈接庫,使用FT245R的廠商提供的API函數(shù)進(jìn)行編程實現(xiàn)。

            1. 系統(tǒng)調(diào)試和測試

            1. 各調(diào)試功能的驗證

            1. 測試程序

            當(dāng)OCD、USB-JTAG協(xié)議轉(zhuǎn)換器和PC機控制臺這三個片上的組成部分都設(shè)計好以后,下一步的工作就是來編寫一段匯編程序作為目標(biāo)測試程序,因為目標(biāo)處理器是一款CSIC處理器,所以還必須設(shè)計好一段可用的微程序存放到處理器內(nèi)部控制存儲器中來完成整個處理器控制信號的產(chǎn)生。

            由于處理器內(nèi)存地址0000~002F作為堆棧使用,所以內(nèi)存中存放的機器指令必須從地址0030開始存放,本文在xilinx的SPARTAN-3E開發(fā)板上實現(xiàn)處理器以及片上調(diào)試器,所以同時也將編寫好的測試程序生成存儲器初始化文件,然后采用xilinx的RAM核將編輯好的存儲器文件初始化到該RAM核中。在處理器上電時的程序入口地址設(shè)置為測試程序的入口即可。

            現(xiàn)在編寫一段測試程序如下:

            0030:0761 0100; MOV #100H,R1

            0032:043A 0002; MOV R1,0002H

            0034:2b68 0001; TEST #0001H, R0

            0036:019a 000B; JZ 000BH

            左邊是在機器指令以及其在內(nèi)存中的位置,右邊是其對應(yīng)的匯編程序。其中共有四條指令,包括對通用寄存器、內(nèi)存等資源的訪問,跳轉(zhuǎn)指令是程序的跳躍執(zhí)行,由于在此處關(guān)注的是處理器的內(nèi)部狀態(tài),所采用的測試程序只要能夠覆蓋整個處理器的數(shù)據(jù)通路即可。

            1. 復(fù)位功能驗證

            復(fù)位功能是指當(dāng)系統(tǒng)出現(xiàn)異?;蛘咛幱诘臓顟B(tài)用戶不能確定時,可以使用該功能使處理器回到初始狀態(tài)。由于處理器內(nèi)部與處理器初始運行有關(guān)的寄存器初始值都是確定的值,所以要驗證復(fù)位調(diào)試功能,只需將復(fù)位調(diào)試指令發(fā)送到OCD,然后讀出處理器內(nèi)部寄存器的值與寄存器的初始值是否相同來確定復(fù)位調(diào)試功能是否正確執(zhí)行。

            首先來看一下處理器內(nèi)部一些寄存器的初始值,在處理器內(nèi)部堆棧指針SP、程序計數(shù)器PC和中斷允許寄存器MASK有特別的初始值,其他寄存器都為0值,SP初始值為0030H,PC值也為0030H,因為在處理器運行時SP從0030H往小地址減而PC值則是往大地址執(zhí)行。而MASK初始值為5AA5,設(shè)置這樣的初始值主要是為了容易檢測數(shù)據(jù)在讀出時是否出現(xiàn)錯位的現(xiàn)象。

            執(zhí)行處理器復(fù)位調(diào)試功能,然后讀出內(nèi)部寄存器的值,看是否回到初始狀態(tài),PC機控制臺顯示出讀出的寄存器值如圖1,可以看出所有的寄存器都回到了初始狀態(tài),表示復(fù)位調(diào)試功能實現(xiàn)正確。

            圖 1 復(fù)位功能驗證

            1. 微指令單步

            微指令單步主要是在執(zhí)行一條機器指令過程中,為了能更清楚詳細(xì)的處理器內(nèi)部具體操作涉及到具體的控制信號起作用以及某些寄存器的操作。本文的測試程序的第一條機器指0761 0100(MOV #100H,R1),是將立即數(shù)十六進(jìn)制的100移動到通用寄存器R0中。根據(jù)第三章介紹的微程序的設(shè)計和微指令的轉(zhuǎn)移方式,寫出該機器指令所對應(yīng)的微指令地址和微指令。

            000:20080001;

            001:00069002;

            002:CC000003;

            003:00000404;

            004:00000A08;

            00B:2008000F;

            00F:00069C10;

            014:C0080015;

            015:00061016;

            016:D0000006;

            在單步調(diào)試過程中將數(shù)據(jù)讀回與以上的分析相比較,將指令0761 0100的單步調(diào)試過程每一個單步的數(shù)據(jù)都讀回,其中將微指令單步中的主要界面截圖如圖2、圖3、圖4和圖5。

            圖2第一條微指令

            圖3 第二條微指令

            圖4 讀數(shù)據(jù)微指令

            圖5 結(jié)果寫入R1

            通過觀察UAR、DR、IR、R1、PC和AR六個寄存器值的變化,可知系統(tǒng)正常按照預(yù)期運行,并且單步調(diào)試功能正確實現(xiàn)。

            1. 微指令斷點

            微指令斷點調(diào)試時,首先通過斷點設(shè)置將微指令斷點值寫入到斷點寄存器。其中斷點寄存器BPR中為顯示正是通過PC機控制臺寫入到BPR寄存器中值,說明斷點值已經(jīng)正確的寫入。然后運行處理器,由于當(dāng)處理器運行停止時讀取處理器內(nèi)部寄存器狀態(tài),結(jié)果返回如圖6。其中UAR顯示現(xiàn)在處理器停止的微指令的位置,讀出的其他寄存器值也是運行到當(dāng)前微指令斷點的值。

            圖6 微指令斷點返回結(jié)果

            1. 連續(xù)運行和停止

            連續(xù)運行是處理器運行在正常情況下,此時并不需要片上調(diào)試器的干涉,至于停止運行則是讓處理器運行完當(dāng)前機器指令則停止。由于在內(nèi)存中存儲的程序很短,而處理器的運行速度很快,所以在發(fā)送完連續(xù)運行調(diào)試指令,可以馬上執(zhí)行停止運行調(diào)試指令內(nèi)存中的測試指令已執(zhí)行完成了,所以在停止運行指令之后再通過PC機控制臺來讀取處理器內(nèi)部寄存器的值就不會改變了。如7、8兩張截圖是停止運行指令之后兩次讀取數(shù)據(jù)的結(jié)果,可以看出結(jié)果不再變化,證明停止調(diào)試指令正確實現(xiàn)。

            圖7 第一次讀結(jié)果

            圖8 第二次讀結(jié)果

            1. 總結(jié)

            在嵌入式系統(tǒng)的開發(fā)過程中,調(diào)試是不可或缺的一環(huán)。一個好的調(diào)試器可以大大的提高系統(tǒng)開發(fā)的效率,縮短推出產(chǎn)品的時間,同時也提高了系統(tǒng)的可靠性。

            本文設(shè)計了一個基于JTAG協(xié)議的片上調(diào)試器,該片上調(diào)試器實現(xiàn)了微指令和機器指令的單步、斷點以及讀取處理器內(nèi)部寄存器和寫入PC、處理器復(fù)位等常用調(diào)試功能。構(gòu)建掃描鏈時采用獨立的掃描通路不對處理器本身寄存器做任何修改,這樣在保證實現(xiàn)調(diào)試功能的同時還最大程度的保護(hù)了處理器數(shù)據(jù)通路的獨立性,將對處理器的侵入性降到一個比較低的水平。



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉