嵌入式軟件系統(tǒng)設(shè)計(jì)_第1頁(yè)
嵌入式軟件系統(tǒng)設(shè)計(jì)_第2頁(yè)
嵌入式軟件系統(tǒng)設(shè)計(jì)_第3頁(yè)
嵌入式軟件系統(tǒng)設(shè)計(jì)_第4頁(yè)
嵌入式軟件系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)嵌入式軟件系統(tǒng)設(shè)計(jì)20131提綱132嵌入式軟件開(kāi)發(fā)過(guò)程ARM軟件設(shè)計(jì)與代碼分析ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具第六章嵌入式軟件系統(tǒng)設(shè)計(jì)2常用調(diào)試方法軟件仿真駐留監(jiān)控程序硬件要求高,一般在硬件穩(wěn)定之后進(jìn)行需要占用目標(biāo)板上的一部分資源不能對(duì)程序的全速運(yùn)行進(jìn)行完全仿真JTAG仿真器完全非插入式調(diào)試,不使用片上資源,無(wú)需目標(biāo)存儲(chǔ)器仿真效果更加接近于目標(biāo)硬件在線仿真器ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具3ARM主流開(kāi)發(fā)工具Windows操作系統(tǒng)ARMADS/SDT+調(diào)試器GNU+Cygwin+調(diào)試器ARMSDT+簡(jiǎn)易電纜KEIL4.13+調(diào)試器Linux操作系統(tǒng)GNU+GDBARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具4ARM嵌入式開(kāi)發(fā)模式(ARMADS/SDT+調(diào)試器)ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具5ADS與Multi-ICE

ARMADS全稱為ARMDeveloperSuite,是ARM公司推出的用于ARM程序設(shè)計(jì)、開(kāi)發(fā)和調(diào)試的集成開(kāi)發(fā)工具?,F(xiàn)在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。ADS由命令行開(kāi)發(fā)工具,ARM運(yùn)行時(shí)庫(kù),圖形化集成開(kāi)發(fā)環(huán)境(CodeWarrior和AXD),實(shí)用程序和支持軟件組成。ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具6ADS命令行開(kāi)發(fā)工具

ARMC(C++)編譯器

ARM匯編器(armasm)

ARM鏈接器(armlink)

符號(hào)調(diào)試器(armsd)

ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具7ARM運(yùn)行時(shí)庫(kù)ANSIC函數(shù)庫(kù):(armlib)

C++函數(shù)庫(kù):

ARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具8圖形化集成開(kāi)發(fā)環(huán)境(CodeWarrior和AXD)

CodeWarriorforARM

ADS調(diào)試器實(shí)用程序fromELF

armar

Flashdownloader

支持的軟件ARMulatorARM軟件開(kāi)發(fā)流程和開(kāi)發(fā)工具9ADTIDEforARMARM軟件開(kāi)發(fā)工具-ADTIDE簡(jiǎn)介

10嵌入式軟件開(kāi)發(fā)無(wú)操作系統(tǒng)的軟件開(kāi)發(fā)啟動(dòng)代碼應(yīng)用程序基于操作系統(tǒng)的軟件開(kāi)發(fā)bootloader操作系統(tǒng)移植BSP板級(jí)支持包應(yīng)用程序開(kāi)發(fā)ARM軟件設(shè)計(jì)與代碼分析11啟動(dòng)代碼功能硬件初始化引導(dǎo)C代碼特征通常用匯編語(yǔ)言編寫(xiě)程序復(fù)位運(yùn)行入口點(diǎn)代碼量非常小程序流程設(shè)置中斷、異常入口關(guān)中斷硬件寄存器初始化(GPIO配置、總線配置、PLL時(shí)鐘)初始化棧指針數(shù)據(jù)區(qū)初始化C入口函數(shù)調(diào)用BLMainARM軟件設(shè)計(jì)與代碼分析12應(yīng)用程序(無(wú)操作系統(tǒng))功能硬件驅(qū)動(dòng)應(yīng)用特征通常用C語(yǔ)言或者嵌入式匯編語(yǔ)言編寫(xiě)程序較復(fù)雜,代碼量較大ARM軟件設(shè)計(jì)與代碼分析13bootloader功能硬件初始化引導(dǎo)操作系統(tǒng)下載程序(串口、網(wǎng)口、USB)燒寫(xiě)flash特征程序復(fù)位運(yùn)行入口點(diǎn)通常用匯編語(yǔ)言+C語(yǔ)言編寫(xiě)代碼量較小ARM軟件設(shè)計(jì)與代碼分析14嵌入式操作系統(tǒng)移植LinuxWindowsCEuC/OSIIuClinuxNucleusARM軟件設(shè)計(jì)與代碼分析15BSP板級(jí)支持包功能為應(yīng)用程序提供統(tǒng)一的硬件操作接口特征高度硬件相關(guān)高度依賴于具體硬件平臺(tái)各種操作系統(tǒng)各異ARM軟件設(shè)計(jì)與代碼分析16應(yīng)用程序開(kāi)發(fā)(操作系統(tǒng))功能GUI圖形、人機(jī)交互控制算法特征硬件依賴程度小部分可仿真調(diào)試各種操作系統(tǒng)各異ARM軟件設(shè)計(jì)與代碼分析17嵌入式軟件設(shè)計(jì)和調(diào)試流程編輯創(chuàng)建工程添加文件、編寫(xiě)程序匯編語(yǔ)言加C語(yǔ)言編譯配置編譯、匯編和連接參數(shù)編寫(xiě)連接腳本文件編譯調(diào)試連接調(diào)試器下載程序運(yùn)行、調(diào)試固化通過(guò)仿真器燒寫(xiě)flash專用或通用的編程器通過(guò)bootloader燒寫(xiě)flashARM軟件設(shè)計(jì)與代碼分析18交叉編譯GNU交叉編譯編譯.carm-elf-gcc匯編.Sarm-elf-gas連接.oarm-elf-ld操作文件匯編文件.SC文件.c鏈接腳本文件ldscript庫(kù)文件.o.lib.a生成調(diào)試格式文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopyARM軟件設(shè)計(jì)與代碼分析19鏈接腳本段Text段rodata段data段bss段符號(hào)Image_RO_Limit

Image_RW_BaseImage_ZI_BaseImage_ZI_LimitGCC庫(kù)專用調(diào)試信息ARM軟件設(shè)計(jì)與代碼分析20鏈接腳本示例程序在SDRAM中運(yùn)行程序在FLASH中運(yùn)行ARM軟件設(shè)計(jì)與代碼分析21GCC庫(kù)GCC庫(kù)標(biāo)準(zhǔn)C函數(shù)庫(kù)lib.a-lc標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)庫(kù)libm.a-lm標(biāo)準(zhǔn)函數(shù)庫(kù)的支持庫(kù)libg.a-lgGCC的支持庫(kù)libgcc.a-lgcc鏈接排列順序-lm–lc–lgcc-lgARM軟件設(shè)計(jì)與代碼分析22JXARM9-2410啟動(dòng)代碼分析ARM軟件設(shè)計(jì)與代碼分析在基于ARM920Tcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0x00000000開(kāi)始執(zhí)行,因此在這個(gè)地址處安排的通常就是系統(tǒng)的啟動(dòng)代碼。它通常也是BootLoader程序的一部分,可以在啟動(dòng)代碼基礎(chǔ)上編寫(xiě)B(tài)ootLoader。用匯編語(yǔ)言編寫(xiě)。啟動(dòng)代碼是在復(fù)位后運(yùn)行其它程序之前運(yùn)行的一段小程序。通過(guò)它,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用C函數(shù)準(zhǔn)備好正確的環(huán)境。23啟動(dòng)代碼的移植和修改ARM軟件設(shè)計(jì)與代碼分析啟動(dòng)代碼除了依賴于CPU的體系結(jié)構(gòu)外,實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設(shè)的類型等。對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運(yùn)行在一塊板子上的啟動(dòng)代碼也能運(yùn)行在另一塊板子上,也還是需要作一些必要的修改。24啟動(dòng)代碼流程圖啟動(dòng)代碼的功能:RAM初始化,設(shè)置各個(gè)部件的時(shí)鐘和片選,將BootLoader拷貝到RAM中,設(shè)置堆棧,調(diào)用C函數(shù)。注意:在本階段,特別是在堆棧設(shè)置之前,進(jìn)行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不可預(yù)知的結(jié)果;ARM軟件設(shè)計(jì)與代碼分析25設(shè)置異常跳轉(zhuǎn)表復(fù)位異常直接跳轉(zhuǎn)到ResetHandler處,它是相對(duì)跳轉(zhuǎn),位置無(wú)關(guān)。ARM軟件設(shè)計(jì)與代碼分析26關(guān)閉看門(mén)狗設(shè)置S3C2410WTCON寄存器必須設(shè)置0x01e000000x01d30000ARM軟件設(shè)計(jì)與代碼分析27設(shè)置中斷模式并禁止中斷設(shè)置S3C2410中斷寄存器設(shè)置所有一級(jí)中斷源與二級(jí)中斷源為不可用狀態(tài)ARM軟件設(shè)計(jì)與代碼分析28配置存儲(chǔ)器控制寄存器寬度ARM軟件設(shè)計(jì)與代碼分析0x01e00000配置值29堆棧初始化ARM軟件設(shè)計(jì)與代碼分析30C代碼初始化ARM軟件設(shè)計(jì)與代碼分析拷貝RW數(shù)據(jù)段ZI段清零跳轉(zhuǎn)到Main函數(shù)處執(zhí)行31JXARM9-2410BOOTLOADER分析ARM軟件設(shè)計(jì)與代碼分析BootLoader是在啟動(dòng)代碼的基礎(chǔ)之上,通常啟動(dòng)代碼包含于BootLoader之中BootLoader常用于引導(dǎo)操作系統(tǒng)或者應(yīng)用程序BootLoader可以包含一些簡(jiǎn)單的調(diào)試手段JXARM9-2410使用通用的u-boot32u-boot簡(jiǎn)介ARM軟件設(shè)計(jì)與代碼分析u-boot是由德國(guó)DENX小組開(kāi)發(fā)的交叉平臺(tái)BootLoader,其全稱為“universalBootLoader”。u-boot的開(kāi)發(fā)目標(biāo)是支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。它提供數(shù)百種嵌入式開(kāi)發(fā)板和各種CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同時(shí)它除了支持Linux系統(tǒng)的引導(dǎo)外,還支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多種嵌入式操作系統(tǒng)的引導(dǎo)。33u-boot簡(jiǎn)介ARM軟件設(shè)計(jì)與代碼分析u-boot的用戶接口類似于Linux的shell界面,通過(guò)串口連接以后,用戶可以交互式的輸入命令和看到結(jié)果,u-boot的啟動(dòng)界面如下所示:U-Boot1.1.1(Sep62004-12:12:06)U-Bootcode:33F80000->33F9CED0BSS:->33FA116CRAMConfiguration:Bank#0:3000000064MBFlash:32MBIn:serialOut:serialErr:serialHitanykeytostopautoboot:0JX2410#34BootLoader的基本概念BootLoader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。嵌入式系統(tǒng)中,整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)完全由BootLoader來(lái)完成。比如在一個(gè)基于ARM920Tcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0x00000000開(kāi)始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。簡(jiǎn)單地說(shuō),BootLoader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。通常,BootLoader

是依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個(gè)通用的BootLoader

是很困難的。ARM軟件設(shè)計(jì)與代碼分析35BootLoader的移植和修改BootLoader除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader

實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置,比如板卡的硬件地址分配,RAM芯片的類型,其他外設(shè)的類型等。對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,如果他們的硬件資源和配置不一致的話,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,也還是需要作一些必要的修改。ARM軟件設(shè)計(jì)與代碼分析36BootLoader的安裝系統(tǒng)加電或復(fù)位后,所有的CPU通常都從CPU制造商預(yù)先安排的地址上取指令。比如,S3C2410在復(fù)位時(shí)都從地址0x00000000取它的第一條指令。嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM或FLASH等)被安排這個(gè)起始地址上,因此在系統(tǒng)加電后,CPU將首先執(zhí)行BootLoader程序。也就是說(shuō)對(duì)于基于S3C2410的這套系統(tǒng),我們的BootLoader是從0地址開(kāi)始存放的,而這塊起始地址需要采用可引導(dǎo)的固態(tài)存儲(chǔ)設(shè)備如FLASH。ARM軟件設(shè)計(jì)與代碼分析37用來(lái)控制BootLoader的設(shè)備或機(jī)制串口通訊是最簡(jiǎn)單也是最廉價(jià)的一種雙機(jī)通訊設(shè)備,所以往往在BootLoader中主機(jī)和目標(biāo)機(jī)之間都通過(guò)串口建立連接,BootLoader

程序在執(zhí)行時(shí)通常會(huì)通過(guò)串口來(lái)進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。當(dāng)然如果認(rèn)為串口通訊速度不夠,也可以采用網(wǎng)絡(luò)或者USB通訊,那么相應(yīng)的在BootLoader中就需要編寫(xiě)各自的驅(qū)動(dòng)。ARM軟件設(shè)計(jì)與代碼分析38BootLoader的操作模式啟動(dòng)加載模式:這種模式也稱為"自主"(Autonomous)模式。也即BootLoader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶的介入。這種模式是BootLoader的正常工作模式。下載模式:在這種模式下,目標(biāo)機(jī)上的BootLoader將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)下載的文件通常首先被BootLoader保存到目標(biāo)機(jī)的RAM中,然后再被BootLoader寫(xiě)到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)設(shè)備中。BootLoader

的這種模式通常在系統(tǒng)更新時(shí)使用。工作于這種模式下的BootLoader

通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。在uboot中可以通過(guò)修改環(huán)境變量實(shí)現(xiàn)自主模式。ARM軟件設(shè)計(jì)與代碼分析39BootLoader與主機(jī)間文件傳輸?shù)耐ㄐ旁O(shè)備及協(xié)議最常見(jiàn)的情況就是,目標(biāo)機(jī)上的BootLoader

通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸,傳輸可以簡(jiǎn)單的采用直接數(shù)據(jù)收發(fā),當(dāng)然在串口上也可以采用xmodem/ymodem/zmodem

協(xié)議以及在以太網(wǎng)上采用TFTP協(xié)議。ARM軟件設(shè)計(jì)與代碼分析40BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架從操作系統(tǒng)的角度看,BootLoader的總目標(biāo)就是正確地調(diào)用內(nèi)核來(lái)執(zhí)行。大多數(shù)BootLoader都分為stage1和stage2兩大部分。依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在stage1中,而且通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn),以達(dá)到短小精悍的目的,也就是前面說(shuō)的啟動(dòng)代碼。而stage2則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。ARM軟件設(shè)計(jì)與代碼分析41BootLoader的主要任務(wù)與典型結(jié)構(gòu)框架BootLoader的stage1通常包括以下步驟 為加載BootLoader

的stage2準(zhǔn)備RAM空間拷貝BootLoader

的stage2到RAM空間中設(shè)置好堆棧跳轉(zhuǎn)到stage2的C入口點(diǎn)BootLoader的stage2通常包括以下步驟初始化本階段要使用到的硬件設(shè)備調(diào)用應(yīng)用程序或啟動(dòng)內(nèi)核ARM軟件設(shè)計(jì)與代碼分析42Stage1初始化流程圖stage1的功能:RAM初始化,設(shè)置各個(gè)部件的時(shí)鐘和片選,將BootLoader拷貝到RAM中,設(shè)置堆棧,調(diào)用Stage2。注意:在本階段,特別是在堆棧設(shè)置之前,進(jìn)行函數(shù)調(diào)用(也有些匯編子程序不需要使用堆棧)或者使用堆棧保存數(shù)據(jù)將產(chǎn)生不可預(yù)知的結(jié)果;ARM軟件設(shè)計(jì)與代碼分析43Stage2流程圖stage2的功能: 初始化串口,顯示菜單,通過(guò)控制臺(tái)獲取用戶輸入,并執(zhí)行相應(yīng)的命令操作。ARM軟件設(shè)計(jì)與代碼分析44板級(jí)支持包ARM軟件設(shè)計(jì)與代碼分析BSP(板級(jí)支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層次,它完成系統(tǒng)上電后最初的硬件和軟件初始化,并對(duì)底層硬件進(jìn)行封裝,使得操作系統(tǒng)不再面對(duì)具體的操作。45板級(jí)支持包的特點(diǎn)ARM軟件設(shè)計(jì)與代碼分析硬件相關(guān)性:因?yàn)榍度胧綄?shí)時(shí)系統(tǒng)的硬件環(huán)境具有應(yīng)用相關(guān)性,所以,作為高層軟件與硬件之間的接口,BSP必須為操作系統(tǒng)提供操作和控制具體硬件的方法。操作系統(tǒng)相關(guān)性:不同的操作系統(tǒng)具有各自的軟件層次結(jié)構(gòu),因此,不同的操作系統(tǒng)具有特定的硬件接口形式。46板級(jí)支持包的功能ARM軟件設(shè)計(jì)與代碼分析47板級(jí)支持包的功能ARM軟件設(shè)計(jì)與代碼分析嵌入式系統(tǒng)初始化片級(jí)初始化板級(jí)初始化系統(tǒng)級(jí)初始化硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序和BootLoader存在一定的重疊48系統(tǒng)級(jí)初始化ARM軟件設(shè)計(jì)與代碼分析這是一個(gè)以軟件初始化為主的過(guò)程,主要進(jìn)行操作系統(tǒng)初始化。BSP將控制轉(zhuǎn)交給操作系統(tǒng),由操作系統(tǒng)進(jìn)行余下的初始化操作。包括加載和初始化與硬件無(wú)關(guān)的設(shè)備驅(qū)動(dòng)程序,建立系統(tǒng)內(nèi)存區(qū),加載并初始化其他系統(tǒng)軟件模塊,比如網(wǎng)絡(luò)系統(tǒng)、文件系統(tǒng)等;最后,操作系統(tǒng)創(chuàng)建應(yīng)用程序環(huán)境并將控制轉(zhuǎn)交給應(yīng)用程序的入口。49硬件相關(guān)的驅(qū)動(dòng)程序ARM軟件設(shè)計(jì)與代碼分析與初始化過(guò)程相反,硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序的初始化和使用通常是一個(gè)從高層到底層的過(guò)程。盡管BSP中包含硬件相關(guān)的設(shè)備驅(qū)動(dòng)程序,但是這些設(shè)備驅(qū)動(dòng)程序通常不直接由BSP使用,而是在系統(tǒng)初始化過(guò)程中由BSP把它們與操作系統(tǒng)中通用的設(shè)備驅(qū)動(dòng)程序關(guān)聯(lián)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論