基于實時操作系統(tǒng)VxWorks的CAN驅動設計與實現(xiàn)_第1頁
基于實時操作系統(tǒng)VxWorks的CAN驅動設計與實現(xiàn)_第2頁
基于實時操作系統(tǒng)VxWorks的CAN驅動設計與實現(xiàn)_第3頁
基于實時操作系統(tǒng)VxWorks的CAN驅動設計與實現(xiàn)_第4頁
基于實時操作系統(tǒng)VxWorks的CAN驅動設計與實現(xiàn)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、收稿日期:2005204218;修返日期:2005206214基金項目:國防預研資助項目(417010402基于實時操作系統(tǒng)Vx Wo rks 的CA N 驅動設計與實現(xiàn)3徐美榮,蔡銘,董金祥(浙江大學計算機科學與技術學院,浙江杭州310027摘要:設備驅動設計是嵌入式系統(tǒng)開發(fā)的難點。針對本系統(tǒng)可靠性和實時性要求嚴格的特點,在詳細分析Vx Works 實時操作系統(tǒng)設備驅動機制的基礎上,通過采用內核過程的方式實現(xiàn)了Vx Works 下CAN 設備驅動,達到了預期的目標。所給出的Vx Works 下設備驅動設計的一般步驟為Vx Works 其他設備驅動開發(fā)提供了參考。關鍵詞:Vx Works;實時

2、操作系統(tǒng);內核過程;設備驅動;CAN 總線中圖法分類號:TP311111文獻標識碼:A 文章編號:100123695(20060520185204Design and I m p lementati on of CAN D river Based on Real 2Ti m e Operati on Syste m Vx WorksXU Mei 2r ong,C A IM ing,DONG J in 2xiang(College of Co m puter Science &Technology,Zhejiang U niversity,Hangzhou Zhejiang 310027

3、,China Abstract:Design of device 2driver is a difficult task in e mbedded 2syste m s devel op ing .Considering the de mand of reliabilityand near real 2ti m e of this syste m,the mechanis m of device 2driver based on RT OS of Vx Works is analyzed firstly,then the de 2vice 2driver of CAN bus is i m p

4、 le mented by using kernel 2p r ocess technique .Thr ough thismethod,expectant perfor mance of tar 2get syste m is achieved .The general p r ocess of device 2driver 2design used in this paper can be refered by others device 2driver 2devel op ing based on Vx Works .Key words:Vx Works;RT OS;Kernel 2Pr

5、 ocess;Device D river;CAN Bus1引言目前,嵌入式系統(tǒng)的開發(fā)越來越受到重視,嵌入式產品的應用越來越廣泛。開發(fā)所采用的操作系統(tǒng)中,Vx Works 是比較受歡迎的一種。Vx Works 是由W indR iver 公司開發(fā)的具有工業(yè)領導地位的高性能實時操作系統(tǒng)(Real 2Ti m e Operati on Syste m,RT OS ,是一個具有可伸縮、可裁剪和高可靠性,同時適用于所有主流CP U 目標平臺的實時操作系統(tǒng)。Vx Works 的微內核W ind 是一個具有較高性能的、標準的嵌入式實時操作系統(tǒng)內核。其主要特點包括快速多任務切換、搶占式任務調度、任務間通信手

6、段多樣化等。在一個典型的Vx Works 嵌入式系統(tǒng)應用中,傳送和接收少量的重要數(shù)據(jù)是必要的,這些數(shù)據(jù)必須在一個實時的時間內到達。這與非實時的網絡不同,如在PCLAN 中傳輸一個文件。控制器局域網(C AN 是Bosch 公司在現(xiàn)代汽車技術中領先推出的一種多主機局域網,由于其卓越的性能、極高的可靠性、獨特靈活的設計和低廉的價格,現(xiàn)已廣泛應用于工業(yè)現(xiàn)場控制、智能大廈、小區(qū)安防、交通工具、醫(yī)療儀器、環(huán)境監(jiān)控等眾多領域。一般來說CAN 報文包允許傳輸最高八個字節(jié)的數(shù)據(jù),而總線仲裁的方法保證了一個重要數(shù)據(jù)能夠在一個保證的時間內到達1。目前,Vx Works 對現(xiàn)場總線通信支持的驅動還是不多,本文詳細分

7、析了Vx Works 設備驅動機制,并通過CAN 驅動設計的實例給出了Vx Works 設備驅動設計的一般思路。2Vx Works 設備驅動分析Vx Works 操作系統(tǒng)有兩種方式實現(xiàn)驅動:把設備驅動程序作為獨立任務來實現(xiàn),直接在頂層任務中實現(xiàn)硬件操作,完成特有的專用驅動程序。Vx Works 的I/O 系統(tǒng)將設備驅動程序作為內核過程實現(xiàn),這種方式可以大大減少系統(tǒng)的開銷,提高系統(tǒng)的可靠性和實時性。Vx Works 標準設備驅動是通過I/O 系統(tǒng)來存取的,這樣做的好處是可以屏蔽底層硬件,對上層應用程序提供統(tǒng)一的接口。Vx Works 的I/O 系統(tǒng)有其獨特的特性,使得它比其他I/O 系統(tǒng)更快速、

8、靈活,這在實時系統(tǒng)中非常重要。還有一些特殊的設備驅動,如網絡設備驅動,由于其自身的特性,雖然不是通過標準I/O 來進行存取的,但是也都有它們各自相關的規(guī)范2。在這里只介紹通過I/O 系統(tǒng)存取的標準設備驅動機制。211與設備驅動關聯(lián)的表在Vx Works 中,應用程序是通過打開命名文件來訪問I/O 設備的。要理解Vx Works 設備驅動機制必須分清文件描述符表(F D _T ABLE 、設備鏈表(DE V I CE L I ST 和驅動表(DRV _T ABLE 三者的各自作用和關系3,如圖1所示。(1文件描述符表(F D_T ABLE 。主要用來管理已經打開的文件。每一個打開的文件都會在F

9、D _T ABLE 中占用一個條目(F D_E NTRY 。隨后對文件的操作,都由應用程序通過對文件在F D_T ABLE 中的索引fd 進行操作來實現(xiàn)。F D _T ABLE 中所包含的F D _E NTRY 的數(shù)量,也就是系統(tǒng)一次所能打開的最大文件數(shù)。F D_E NTRY 記錄了與每一個已經打開的文件相關的信息,主要包括該文件所在設備的設備頭指針pDevHdr,文件的名字na me,以及該條目是否可用的標志等信息。在這里最主要的是設備頭指針pDevHdr,通過該指針,操作系統(tǒng)能夠找到實際要操作的文件設備,并調用設備的驅動程序來真正地完成對設備的操作。(2設備鏈表(DE V I CE L I

10、 ST 是Vx Works 設備的雙向鏈表。要編寫驅動的設備也必須加入到該鏈表中。每一個設備數(shù)據(jù)結構的第一項必須是一個設備頭DE V_HDR 數(shù)據(jù)結構,其余是與設備相關的數(shù)據(jù),如操作設備所需的緩沖器和進行同步或互斥用的信號量等數(shù)據(jù)。DE V _HDR 數(shù)據(jù)結構記錄了某一類設備的主要信息,包括驅動號(drv_nu m 和設備名na me,以及一個用于將所有的設備鏈接起來的DL _NODE 數(shù)據(jù)結構,也就是Vx Works 中的雙向鏈表結構node 。通過node,系統(tǒng)中所有存在的設備鏈接成一個鏈表,操作系統(tǒng)能夠遍歷這個鏈表,從而知道所需的設備是否存在。驅動號drv_nu m 代表了驅動表(DRV

11、_T ABLE 中的第幾個條目,這個條目里保存有該設備的實際操作函數(shù)指針。這樣,通過drv_nu m,操作系統(tǒng)就可以最終調用設備的驅動程序。(3驅動表(DRV_T ABLE 。由驅動條目組成。它維護了系統(tǒng)內所有設備的驅動條目。驅動條目存放的是實際操作設備的驅動指針。在Vx Works 中,每一類設備的操作共分為七種類型,分別是生成、刪除、打開、關閉、讀、寫和I octl 。Vx Works I/O 系統(tǒng)的初始化工作是由根任務usr Root 調用i osI nit 例程來完成的。其原型如下:ST AT US i osI nit (int max_drivers,int max_files,ch

12、ar 3null D ev Na me 其中,參數(shù)max_drivers 是允許的最多驅動數(shù)也是驅動條目的最大數(shù)量;max_files 是允許一次打開的最多文件數(shù)也是最大的文件條目數(shù)量;null D ev Na me 是空設備的名稱。開始時,系統(tǒng)定義了一個空設備和一個空設備的寫操作;然后例程分配文件描述表,并清空所有的文件條目;分配驅動表,并清空所有的驅動條目;初始化設備鏈表;接著例程把驅動表的第一條目設置為一個空設備寫,將空設備掛入設備鏈表的第一個節(jié)點。至此已經完成I/O 系統(tǒng)的初始化工作,就形成如圖1所示的結構。212設備訪問過程Vx Works 為各種設備(包括字符設備、塊設備、虛擬設備

13、及網絡設備提供統(tǒng)一的訪問接口。用戶訪問設備是通過應用程序界面(AP I 來實現(xiàn)的。I/O 系統(tǒng)所起的作用就是把用戶請求分配到與設備對應的驅動例程中去。用戶在操作I/O 設備之前,與設備對應的文件描述符必須被打開,這是通過調用open (或create (函數(shù)來完成的3。下面以某一個設備驅動程序為例,說明設備的訪問過程(假設設備名為“/XX /0”,并且以XX 設備的驅動為例。(1調用open (“/XX /0”,O_RDWR,0644函數(shù);(2I/O 系統(tǒng)遍歷設備鏈表(DE V I CE L I ST ,尋找名字為“/XX /0”的設備項,并找到該設備相應的驅動號drv_num;(3I/O 系

14、統(tǒng)為設備文件在文件描述符表(F D _T ABLE 中分配一個空的文件條目(F D_E NTRY ;(4I/O 系統(tǒng)通過驅動號drv_nu m,在驅動表(DRV _T A 2BLE 中找到XX 設備的xx Open (xx_DE V pXX _DE V,char 3name,int flags 例程,該驅動例程返回設備描述符指針;(5如果打開成功,就將設備描述符指針、設備全文件名及驅動相關的返回值存放在新分配的文件條目里,并返回一個fd;如果設備打開失敗,就將已經分配的文件條目釋放;(6讀、寫等操作可以直接通過調用fd 找到設備驅動號,進而找到設備的驅動例程。213設備驅動設計過程通過分析知道

15、,設備驅動設計需以下的幾個步驟3,4:(1設備數(shù)據(jù)結構的定義,其第一項必須是設備頭DE V _HDR 結構;(2設備驅動例程編寫,包括生成、刪除、打開、關閉、讀、寫和I octl 例程;(3設備驅動注冊,通過調用i os D rvI nstall (函數(shù)將自己的設備驅動注冊到I/O 系統(tǒng)的驅動表(DRV_T ABLE 中;(4設備掛載,通過調用i os Dev Add (函數(shù)將設備掛載到I/O 系統(tǒng)的設備鏈表(DE V I CE L I ST 中,調用int Connect (函數(shù)完成中斷服務程序的掛接,并用sysI ntEnableP I C (函數(shù)打開設備中斷;(5把文件或函數(shù)按照BSP

16、的目錄結構加到正確的位置;(6編寫Makefile 文件,最后是編譯調試工作。3基于Vx W o rks 的CAN 設備驅動實現(xiàn)311I SA 2CAN 適配卡的硬件結構I S A 2CAN 適配卡是I S A 接口的C AN 總線通信適配卡,其主要功能是讓計算機方便地連接到CAN 總線上,實現(xiàn)CAN 210B 協(xié)議(兼容CAN 2.0A 的連接通信,CAN 的通信協(xié)議主要由C AN 控制器SJA1000完成,如圖2所示 。適配卡使用系統(tǒng)內存地址映射空間方式,對于I ntel x86體系的CP U,I S A 可以映射的空間為0xC80000xEFFFF 。使用比較器和地址選擇開關組成可選端口

17、地址譯碼電路,通過開關選通內存映射基地址(C8000H,C9000H,C A000H,EF000H ,以避免與其他器件沖突。適配卡中斷I RQ 設置通過跳線進行選擇,可選的I RQ有I RQ3,I RQ4,I RQ5,I RQ6,I RQ7, I RQ9,I RQ10,I RQ11,I RQ12和I RQ15。312CAN設備驅動主要實現(xiàn)技術31211主要數(shù)據(jù)結構(1協(xié)議幀數(shù)據(jù)結構typedef structunsigned l ong I D;/3報文I D3/unsigned char SendType;/3發(fā)送幀類型3/unsigned char Re moteFlag;/3是否是遠程幀

18、3/unsigned char ExternFlag;/3是否是擴展幀3/unsigned char Data Len;/3數(shù)據(jù)長度(<=83/unsigned char Data8;/3報文的數(shù)據(jù)3/CAN_FRAME;(2緩沖器數(shù)據(jù)結構typedef structint pT oBuf;/3寫入指針3/int pFr omBuf;/3讀出指針3/int bufsize;/3緩沖器大小3/CAN_FRAME3buf;/3CAN數(shù)據(jù)幀指針3/CANR I N G;(3CAN設備描述符結構typedef structDEV_HDR pCANHDR;/3I/O系統(tǒng)設備頭3/BOO creat

19、ed;/3TRUE如果設備已經創(chuàng)建3/CANR I N G_I D CanRdBuf;/3環(huán)狀讀緩沖器指針3/SE MAPHORE rdSyncSem;/3讀同步信號量3/SE MAPHORE mutexSe m;/3互斥信號量3/CANR I N G_I D Can W rt B uf;/3環(huán)狀寫緩沖器指針3/SE MAPHORE wrtSyncSem;/3寫同步信號量3/SEL_WAKEUP_L I ST sel W akeupL ist;/3等待設備的任務列表3/CAN_DEV;31212具體實現(xiàn)技術主要完成所需緩沖器的操作和設備基本驅動例程。驅動主要包括設備驅動初始化和設備創(chuàng)建、設備打

20、開、報文的收發(fā)和I/O控制、中斷服務等。(1緩沖器操作CAN緩沖器CANR ing是一個先進先出的環(huán)緩沖器,設有讀和寫兩個環(huán)緩沖器。創(chuàng)建時,比實際的要大一個數(shù)據(jù)幀空間。滿時,讀寫指針始終相差1;只有當空時,讀寫指針相等。由于一個讀任務和一個寫任務是分別對讀指針和寫指針進行修改的,所以它們可以同時訪問環(huán)緩沖器,這由其自身特點來保證,不需要額外的互斥操作。但對于多個讀任務或者多個寫任務同時訪問緩沖器的情況下,需要互斥機制來保證,如用信號量機制。由于C AN協(xié)議是按一幀進行讀寫的,因此環(huán)緩沖器每項的大小也是按固定的一幀大小來創(chuàng)建的,使操作時變得簡單。(2設備驅動初始化Can D rv(和設備創(chuàng)建Ca

21、n Dev Create(設備驅動初始化時,判斷驅動是否已經初始化。如還沒有初始化,則調用i os D rvI nstall(例程。該例程對于同一個設備驅動只需調用一次,它將驅動服務例程與I/O系統(tǒng)服務進行關聯(lián),將C AN驅動例程加入到驅動表DRV_T ABLE中,并且分配給CAN設備一個驅動號。設備創(chuàng)建時,完成設備的一些初始化,包括分配讀緩沖器和寫緩沖器、創(chuàng)建讀寫同步和互斥信號量和初始化等待任務列表等;調用int Connect(例程完成C AN設備的中斷注冊,該例程將中斷服務程序Can I ntr與指定的中斷向量vect or連接;調用sysI ntEnableP I C(例程允許C AN

22、設備中斷;最后調用i os De2 v Add(例程,這個例程向I/O系統(tǒng)的設備鏈表DE V I CE L I ST 中加入一個CAN設備,并設置C AN設備頭結構的驅動號(drv _nu m為設備驅動初始化時返回的驅動號和設備名na me為“/ can/0”(假設用這個設備名字,使得設備對于以后的open(和create(例程可用。(3設備打開Can Open(設備打開,主要完成CAN控制器的初始化工作,返回必須是一個CAN設備指針,這是由于該指針一定要賦值給文件表F D_T ABLE中文件條目F D_E NT RY的第一項pDevHdr。初始化CAN控制器,主要在復位時為各個寄存器設置正確

23、的初值。在設置控制器的寄存器前,必須通過讀模式寄存器的復位模式/請求(Reset Mode/Request標志來檢查控制器是否已進入復位模式,因為要得到配置信息的寄存器,僅在復位模式可寫5。在復位模式中,必須配置下面的控制段寄存器:模式寄存器選擇模式;時鐘分頻寄存器;驗收代碼寄存器和驗收屏蔽寄存器;總線定時寄存器;輸出控制寄存器;中斷使能寄存器。退出復位模式時,必須清除模式寄存器的復位模式/請求標志位,要必須先檢查標志是否確實被清除,是否進入了工作模式,才能進行下一步的操作,這通過循環(huán)讀該標志實現(xiàn)。(4報文的發(fā)送Can W rite(和報文的接收CanRead(數(shù)據(jù)流程的層次關系如圖3所示。應

24、用層調用通用i oL ib 中的函數(shù)Read和W rite,這些函數(shù)從輸入的fd中找到相應的設備描述符,然后找到DRV_T ABLE,調用DRV_T ABLE中的函數(shù)。DRV_T ABLE中的函數(shù)則是第二層的C AN驅動例程(Can2 Read,Can W rite,再由C AN驅動例程和真正的CAN設備打交道。第二層和底層的通信是通過中斷回調函數(shù)(Can I Rx、Can2 I Tx來實現(xiàn)。具體地說,中斷服務程序負責數(shù)據(jù)的收發(fā)。輸出時,底層驅動可以從CAN Out put R ing Buffer中得到數(shù)據(jù)并將數(shù)據(jù)發(fā)送到CAN Bus;輸入時,底層驅動將接收到的數(shù)據(jù)讀到C AN I nput

25、 R ing Buffer中 。報文的發(fā)送主要是完成用戶向C AN寫緩沖器寫數(shù)據(jù)的工作。報文發(fā)送是以循環(huán)方式依次將每一幀數(shù)據(jù)寫入寫緩沖器的。對于每一幀數(shù)據(jù):必須獲得寫同步信號量和互斥信號量獨占緩沖區(qū);將數(shù)據(jù)寫入寫緩沖器,修改寫緩沖器的寫指針;釋放互斥信號量,如果緩沖器還有空間,則釋放寫同步信號量,退出對C AN緩沖器的獨占使用。循環(huán)結束時,返回發(fā)送的數(shù)據(jù)字節(jié)數(shù)。設備創(chuàng)建Can DevCreate在創(chuàng)建寫緩沖器時釋放寫同步信號量,也就是說調用該例程的第一個任務是不阻塞的。寫同步信號量釋放條件是:寫緩沖器有空余空間。釋放的時機是:寫操作結束后,判斷寫緩沖器有空余空間時;中斷寫操作Can I Tx(

26、將一幀數(shù)據(jù)從寫緩沖器寫到C AN總線后;進入寫操作后,但被I/O 控制操作取消時。調用該例程的任務,如果寫緩沖器有空余空間時,完成寫數(shù)據(jù)的工作;如果寫緩沖器滿時,則任務阻塞。報文的接收主要是完成用戶從CAN 讀緩沖器中讀數(shù)據(jù)的工作:進入一個循環(huán)。在循環(huán)體內獲得讀同步信號量和互斥信號量,如果緩沖器中有數(shù)據(jù)則退出循環(huán),否則釋放互斥信號量并繼續(xù)循環(huán)。進入依次讀取每一幀數(shù)據(jù)的循環(huán)。為了喚醒阻塞在讀同步信號量的任務,讀完一幀數(shù)據(jù)后必須檢查緩沖器是否還有數(shù)據(jù),如果有,則釋放讀同步信號量,釋放互斥信號量。返回實際讀取的數(shù)據(jù)字節(jié)數(shù)。釋放讀同步信號量條件是:讀緩沖器有數(shù)據(jù)。釋放讀同步信號量的時機:中斷讀Can

27、2I Rx (接收到C AN 總線上的數(shù)據(jù)幀,并把數(shù)據(jù)讀到讀緩沖器中后;讀操作結束后,判斷讀緩沖器還有數(shù)據(jù)時;進入讀操作后,但被I/O 控制操作取消時。調用該例程的任務,如果讀緩沖器有數(shù)據(jù)時,完成讀數(shù)據(jù)的工作;如果讀緩沖器空時,則任務阻塞。(5中斷服務Can I ntr (中斷服務Can I ntr (讀C AN 控制器的中斷寄存器來識別中斷源,然后根據(jù)不同的中斷源進入不同的工作流程。這些中斷源是由控制器復位時中斷使能寄存器賦值決定的。這里只打開了發(fā)送和接收及數(shù)據(jù)溢出三種中斷。中斷寫Can I Tx (如圖4所示,CAN 控制器只有在發(fā)送狀態(tài)為空閑、上一幀發(fā)送完畢和發(fā)送緩沖器釋放的情況下,把中

28、斷寄存器的發(fā)送中斷位置高,并產生硬件中斷信號通知CP U 把數(shù)據(jù)發(fā)送到CAN Bus 上去。如果CAN 設備寫緩沖器有數(shù)據(jù)在等待發(fā)送,則馬上將數(shù)據(jù)寫入CAN 控制器發(fā)送緩沖器并命令發(fā)送數(shù)據(jù),同時釋放寫同步信號量并喚醒等待設備的寫任務;如果CAN 設備寫緩沖器沒有數(shù)據(jù)在等待發(fā)送,就直接返回。中斷讀Can I Rx (如圖5所示,CAN 控制器發(fā)現(xiàn)CAN 總線上的數(shù)據(jù)己通過驗收濾波器,則把數(shù)據(jù)存在接收數(shù)據(jù)緩沖器中,同時中斷寄存器的接收中斷位置高,并產生硬件中斷信號通知CP U 有數(shù)據(jù)已經接收到。CP U 接收數(shù)據(jù)后,置位清除接收緩沖器位,釋放讀同步信號量并喚醒等待設備的讀任務。CAN 控制器自動發(fā)

29、送回應信號表示已經接收到數(shù)據(jù),對方節(jié)點可以馬上再發(fā)送另一幀數(shù)據(jù)到總線上 。當接收數(shù)據(jù)數(shù)量超出CAN 控制器的接收緩沖器容量時,中斷寄存器數(shù)據(jù)溢出位被置高,并產生硬件中斷信號,通知CP U 已經有數(shù)據(jù)丟失。此時,CP U 重新對控制器進行初始化,再次進入正常工作狀態(tài)。(6I/O 控制Can I octl (I/O 控制是根據(jù)I/O 請求控制代碼的類型來控制C AN 設備的,主要包括讀取或寫緩沖器現(xiàn)有的數(shù)據(jù)幀數(shù)量;清除CAN 設備讀或寫緩沖器;按照請求的大小重新分配CAN 設備的讀或寫緩沖器;設置CAN 總線波特率;選擇或取消CAN 設備的Select 功能;取消本次傳輸。最主要的是設置CAN 總線波特率,因為把一個節(jié)點加入到C AN 總線上時,該節(jié)點的波特率必須與其他的節(jié)點一致6。這里采用自動波特率檢測算法,這是一個不影響網絡運行操作的位速率檢測算法。在只聽模式,控制器不能發(fā)送報文也不能產生出錯幀,只能接收報文。在啟動時,用最高位速率接收報文之前,CAN 控制器使能接收中斷和出錯中斷如果C AN 總線產生錯誤,程序會轉向下一個較低的位速率,在成功地接收到一個報文后,C AN 控制器已經檢測到正確的位速率,轉向正常工作模式。4結束語按照上述思路編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論