嵌入式實時操作系統(tǒng)ucos-ii譯原版第4章_第1頁
嵌入式實時操作系統(tǒng)ucos-ii譯原版第4章_第2頁
嵌入式實時操作系統(tǒng)ucos-ii譯原版第4章_第3頁
嵌入式實時操作系統(tǒng)ucos-ii譯原版第4章_第4頁
嵌入式實時操作系統(tǒng)ucos-ii譯原版第4章_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 4 章4.0任務(wù)管理1建立任務(wù),OSTaskCreate()2建立任務(wù),OSTaskCreateExt()6任務(wù)堆棧9堆棧檢驗,OSTaskStkChk()11刪除任務(wù),OSTaskDel()14請求刪除任務(wù),OSTaskDelReq()17改變?nèi)蝿?wù)的優(yōu)先級,OSTaskChangePrio()20掛起任務(wù),OSTaskSuspend()23恢復(fù)任務(wù),OSTaskResume()25獲得有關(guān)任務(wù)的信息,OSTaskQuery()264.14.24.34.44.54.64.74.84.9I第4章任務(wù)管理在前面的章節(jié)中,筆者曾說過任務(wù)可以是一個無限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。這里

2、要注意的是,任務(wù)代碼并不是被真正的刪除了,而只是 C/OS-不再理會該任務(wù)代碼,所以該任務(wù)代碼不會再運行。任務(wù)看起來與任何 C 函數(shù)一樣,具有一個返回類型和一個參數(shù),只是它從不返回。任務(wù)的返回類型必須被定義成void 型。在本章中所提到的函數(shù)可以在OS_TASK 文件中找到。如前所述,任務(wù)必須是以下兩種結(jié)構(gòu)之一: 或 本章所講的內(nèi)容包括如何在用戶的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的信息。 C/OS-可以管理多達(dá) 64 個任務(wù),并從中保留了四個最高優(yōu)先級和四個最低優(yōu)先級的任務(wù)供自己使用,所以用戶可以使用的只有 56 個任務(wù)。任務(wù)的優(yōu)先級越高,反映優(yōu)

3、先級的值則越低。在最新的C/OS-版本中,任務(wù)的優(yōu)先級數(shù)也可作為任務(wù)的標(biāo)識符使用。 4-1void YourTask (void *pdata)/* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF);void YourTask (void *pdata)for (;) /* 用戶代碼 */調(diào)用C/OS-的服務(wù)例程之一: OSMboxPend();OSQPend(); OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM();/* 用戶代碼 */4.0建

4、立任務(wù),OSTaskCreate()想讓 C/OS-管理用戶的任務(wù),用戶必須要先建立任務(wù)。用戶可以通過傳遞任務(wù)地址和其它參數(shù)到以下兩個函數(shù)之一來建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。 OSTaskCreate()與C/OS 是向下兼容的,OSTaskCreateExt()是 OSTaskCreate()的擴(kuò)展版本,提供了一些附加的功能。用兩個函數(shù)中的任何一個都可以建立任務(wù)。任務(wù)可以在多任務(wù)調(diào)度開始前建立,也可以在其它任務(wù)的執(zhí)行過程中被建立。在開始多任務(wù)調(diào)度(即調(diào)用 OSStart()前,用戶必須建立至少一個任務(wù)。任務(wù)不能由中斷服務(wù)程序(ISR)來建立。

5、 OSTaskCreate()的代碼如程序清單 L4.1 所述。從中可以知道,OSTaskCreate()需要四個參數(shù):task 是任務(wù)代碼的指針,pdata 是當(dāng)任務(wù)開始執(zhí)行時傳遞給任務(wù)的參數(shù)的指針,ptos是分配給任務(wù)的堆棧的棧頂指針(參看 4.02,任務(wù)堆棧),prio 是分配給任務(wù)的優(yōu)先級。 程序L4.1OSTaskCreate()4-28U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos,8U prio)void*psp;8Uerr;if (prio OS_LOWEST_PRIO) (1)return (

6、OS_PRIO_INVALID); OS_ENTER_CRITICAL();if (OSTCBPrioTblprio = (OS_TCB *)0) (2) OSTCBPrioTblprio = (OS_TCB *)1;(3)OS_EXIT_CRITICAL();(4)psp = (void *)OSTaskStkInit(task, pdata, ptos, 0);(5) err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);(6) if (err = OS_NO_ERR) (7)OS_ENTER_CRITICAL();OSTask

7、Ctr+;(8)OSTaskCreateHook(OSTCBPrioTblprio);(9) OS_EXIT_CRITICAL();if (OSRunning) (10)OSSched();(11) OSTaskCreate()一開始先檢測分配給任務(wù)的優(yōu)先級是否有效L4.1(1)。任務(wù)的優(yōu)先級必須在 0 到 OS_LOWEST_PRIO 之間。接著,OSTaskCreate()要確保在規(guī)定的優(yōu)先級上還沒有建立任務(wù)L4.1(2)。在使用C/OS-時,每個任務(wù)都有特定的優(yōu)先級。如果某個優(yōu)先級是空閑的,C/OS-通過放置一個非空指針在OSTCBPrioTbl中來保留該優(yōu)先級L4.1(3)。這就使得O

8、STaskCreate()在設(shè)置任務(wù)數(shù)據(jù)結(jié)構(gòu)的其他部分時能重新允許中斷L4.1(4)。 然后,OSTaskCreate()調(diào)用 OSTaskStkInit()L4.1(5),它負(fù)責(zé)建立任務(wù)的堆棧。該函數(shù)是與處理器的硬件體系相關(guān)的函數(shù), 可以在 OS_CPU_C.C 文件中找到。有關(guān)實現(xiàn) OSTaskStkInit()的細(xì)節(jié)可參看第 8 章移植C/OS-。如果已經(jīng)有人在你用的處理器上成功地移植了 C/OS-,而你又得到了他的代碼,就不必考慮該函數(shù)的實現(xiàn)細(xì)節(jié)了。 OSTaskStkInit()函數(shù)返回新的堆棧棧頂(psp),并被保存在任務(wù)的 0S_TCB 中。注意用戶得將傳遞給 OSTaskStk

9、Init() 函數(shù)的第四個參數(shù) opt 置 0 , 因為 OSTaskCreate() 與 OSTaskCreateExt()不同,它不支持用戶為任務(wù)的創(chuàng)建過程設(shè)置不同的選項,所以沒有任何選項可以通過opt 參數(shù)傳遞給OSTaskStkInit()。 C/OS-支持的處理器的堆棧既可以從上(高地址)往下(低地址)遞減也可以從下往上遞增。用戶在調(diào)用 OSTaskCreate()的時候必須知道堆棧是遞增的還是遞減的(參看所用處理器的 OS_CPU.H 中的 OS_STACK_GROWTH) , 因為用戶必須得把堆棧的棧頂傳遞給 OSTaskCreate(),而棧頂可能是堆棧的最高地址(堆棧從上往下

10、遞減),也可能是最低地址(堆棧從下往上長)。 一旦 OSTaskStkInit() 函數(shù)完成了建立堆棧的任務(wù), OSTaskCreate() 就調(diào)用OSTCBInit()L4.1(6),從空閑的 OS_TCB 池中獲得并初始化一個 OS_TCB。OSTCBInit()的代碼如程序清單 L4.2 所示,它存在于 0S_CORE.C 文件中而不是 OS_TASK.C 文件中。 OSTCBInit()函數(shù)首先從 OS_TCB 緩沖池中獲得一個 OS_TCBL4.2(1),如果 OS_TCB 池中有空閑的 OS_TCBL4.2(2),它就被初始化L4.2(3)。注意一旦 OS_TCB 被分配,該任務(wù)的

11、創(chuàng)建者就已經(jīng)完全擁有它了,即使這時內(nèi)核又創(chuàng)建了其它的任務(wù),這些新任務(wù)也不可能對已分配的 OS_TCB 作任何操作,所以 OSTCBInit()在這時就可以允許中斷,并繼續(xù)初始化OS_TCB的數(shù)據(jù)單元。 4-3 else OS_ENTER_CRITICAL();OSTCBPrioTblprio = (OS_TCB *)0;(12) OS_EXIT_CRITICAL();return (err); else OS_EXIT_CRITICAL();return (OS_PRIO_EXIST); L 4.2 OSTCBI n it () ,( 1 )( 2 )( 3 )4-48U OSTCB I n

12、it (8Up r i o ,OS_STK *p t os ,OS_STK *p,16U i d 16U s t k_ s i ze , vo i d*p e x t ,16Uop t )OS_TCB *p t c b ;OS_ENTER_CR I T ICAL () ;p t c b = OSTCBF r eeL i s t; i f ( p t c b ! = (OS_TCB * ) 0 ) OSTCBF r eeL i s t= p t c b - OSTCBNe x t; OS_EXI T_CR I T ICAL () ;p t c b - OSTCBS t kP t r= p t o

13、 s ;p t c b - OSTCBP r i o= (8U) p r i o ; p t c b - OSTCBS = OS_S_RDY ;p t c b - OSTCBD l y= 0 ; # i f OS_TASK_CREATE_EXT_ENp t c b - OSTCBEx t P t r= p e x t; p t c b - OSTCBS t kS ize= s t k_ s i ze ; p t c b - OSTCBS t kBo tt om = p;p t c b - OSTCBOp t= op t; p t c b - OSTCB I d= i d ;# e l s ep

14、 e x t= p e x t; s t k_ s i ze= s t k_ s i ze ;p= p;op t= op t; i d= i d ;# e nd i f# i f OS_TASK_DEL_ENp t c b - OSTCBDe l Req= OS_NO_ERR ;# e nd i f( 4 )( 5 )( 7 )4-5p t c b - OSTCBY= p r i o 3 ;p t c b - OSTCBB it Y= OSMa pTb l p t c b - OSTCBY ; p t c b - OSTCBX= p r i o & 0 x07 ;p t c b - OSTCB

15、B it X= OSMa pTb l p t c b - OSTCBX ;# i fOS_MBOX_EN | (OS_Q_EN & (OS_MAX_QS = 2 ) | OS_SEM_EN p t c b - OSTCBEv e n tP t r= (OS_EVENT * ) 0 ;# e nd i f# i fOS_MBOX_EN | (OS_Q_EN & (OS_MAX_QS = 2 ) p t c b - OSTCBMs g= ( vo i d * ) 0 ;# e nd i fOS_ENTER_CR I T ICAL () ;OSTCBP r i oTb l p r io = p t

16、c b ;p t c b - OSTCBNe x t= OSTCBL i s t; p t c b - OSTCBP r e v= (OS_TCB * ) 0 ; i f (OSTCBL i s t ! = (OS_TCB * ) 0 ) OSTCBL i s t - OSTCBP r e v = p t c b ;OSTCBL i s t= p t c b ;OSRdyGr p| = p t c b - OSTCBB i tY ;( 6 ) OSRdyTb l p t c b - OSTCBY | = p t c b - OSTCBB it X;OS_EXI T_CR I T ICAL ()

17、 ;r e t u r n (OS_NO_ERR ) ; e l s e OS_EXI T_CR I T ICAL () ;r e t u r n (OS_NO_MORE_TCB ) ; OSTaskCreateExt() L 4.3 OSTa s kCr ea t eEx t () 4-68U OSTa s kCr ea t eEx t ( vo i d( * t a s k )( vo i d *pd ) ,vo id*pd a t a ,( 1 )(2 )( 3 )( 4 )( 5 )( 6 )4-7OS_STK*p t o s , 8Up r i o ,16Ui d , OS_STK*

18、p,32Us t k_ s i ze , vo id*p e x t ,16Uop t )vo i d*p s p ;8Ue rr ;16Ui; OS_STK*p f ill; i f ( p r i o OS_LOWEST_PR IO) r e t u r n (OS_PRIO_ INVAL ID) ;OS_ENTER_CR I T ICAL () ;i f (OSTCBP r i oTb l p r i o = (OS_TCB * ) 0 ) OSTCBP r i oTb l p r io = (OS_TCB * ) 1 ;OS_EXI T_CR I T ICAL () ;i f ( op

19、 t & OS_TASK_OPT_STK_CHK) i f ( op t & OS_TASK_OPT_STK_CLR) P f ill = p;f o r ( i = 0 ; i OSF r ee = 0 ; pd a t a - OSUs e d = 0 ;i f ( p r i o OS_LOWEST_PR IO & p r i o ! = OS_PRIO_SELF ) r e t u r n (OS_PRIO_ INVAL ID) ;OS_ENTER_CR I T ICAL () ;i f ( p r i o = OS_PRIO_SELF ) p r i o = OSTCBCu r-OS

20、TCBP r i o ;p t c b = OSTCBP r i oTb l p r i o ;i f ( p t c b = (OS_TCB * ) 0 ) OS_EXI T_CR I T ICAL () ;( 3 )(4 )( 5 ) OSTaskDel()4-14r e t u r n (OS_TASK_NOT_EXI ST ) ;i f ( p t c b - OSTCBOp t & OS_TASK_OPT_STK_CHK) = 0 ) OS_EXI T_CR I T ICAL () ;r e t u r n (OS_TASK_OPT_ERR ) ;fr ee = 0 ;s i ze

21、= p t c b - OSTCBS t kS i ze ;p c hk = p t c b - OSTCBS t kBo tt om; OS_EXI T_CR I T ICAL () ;# i f OS_STK_GROWTH = 1wh il e ( *p c hk+ = 0 ) fr ee+ ;# e l s ewh il e ( *p c hk - = 0 ) fr ee+ ;# e nd i fpd a t a - OSF r ee = fr ee * s i ze o f(OS_STK) ;pd a t a - OSUs e d = ( s ize - fr ee ) * s i z

22、e o f(OS_STK) ; r e t u r n (OS_NO_ERR ) ; L 4.11? )0 )4-158U OSTa s kDe l (8U p r i o )OS_TCB*p t c b ; OS_EVENT *p e v e n t; i f ( p r i o = OS_ IDLE_PR IO) ( 1 )r e t u r n (OS_TASK_DEL_ IDLE ) ;i f ( p r i o = OS_LOWEST_PR IO & p r i o ! = OS_PRIO_SELF ) ( 2 ) r e t u r n (OS_PRIO_ INVAL ID) ;O

23、S_ENTER_CR I T ICAL () ;i f (OSNe s ti ng 0 ) ( 3 )OS_EXI T_CR I T ICAL () ;r e t u r n (OS_TASK_DEL_ I SR) ;i f ( p r i o = OS_PRIO_SELF ) ( 4 )P r i o = OSTCBCu r-OSTCBP r i o ;i f ( p t c b = OSTCBP r i oTb l p r i o ) ! = (OS_TCB * ) 0 ) ( 5 )i f (OSRdyTb l p tc b - OSTCBY &= p t c b - OSTCBB it

24、 X) = 0 ) ( 6 ) OSRdyGr p &= p t c b - OSTCBB it Y;i f ( p e v e n t = p tc b - OSTCBEv e n t P t r) ! = (OS_EVENT * ) 0 ) ( 7 i f ( p e v e n t -OSEv e n t Tb l p t c b - OSTCBY &= p t c b - OSTCBB it X) =p e v e n t - OSEv e n t Gr p &= p t c b - OSTCBB it Y;P t c b - OSTCBD l y= 0 ;( 8 )P t c b -

25、 OSTCBS= OS_S_RDY ;( 9 )OSLo c kNe s ti ng+ ;( 10 )OS_EXI T_CR I T ICAL () ;( 11 )OSDummy () ;( 12 )4-16OS_ENTER_CR I T ICAL () ;OSLo c kNe s ti ng - ;( 13 )OSTa s kDe l Hook ( p tc b ) ;( 14 )OSTa s kC t r- ;OSTCBP r i oTb l p r io = (OS_TCB * ) 0 ;( 15 )i f ( p t c b - OSTCBP r e v = (OS_TCB * ) 0

26、 ) ( 16 ) p t c b - OSTCBN e x t - OSTCBP r e v = (OS_TCB * ) 0 ;OSTCBL i s t= p t c b - OSTCBNe x t; e l s e p t c b - OSTCBP r e v - OSTCBNe x t = p t c b - OSTCBNe x t; p t c b - OSTCBN e x t - OSTCBP r e v = p t c b - OSTCBP r e v ;p t c b - OSTCBNe x t = OSTCBF r eeL i s t;( 17 ) OSTCBF r eeL i

27、 s t= p t c b ;OS_EXI T_CR I T ICAL () ;OSSc h e d () ;( 18 )r e t u r n (OS_NO_ERR ) ; e l s e OS_EXI T_CR I T ICAL () ;r e t u r n (OS_TASK_DEL_ERR ) ; OSTaskDelReq()4-17 L 4.12? ? ( B)( 3 )( 4 ) L 4.13? ? A)( 2 )( 3 )4-18vo i d Ta s kToBeDe l e t e d ( vo i d *pd a t a )8U e rr ;pd a t a = pd a t

28、 a ; f o r ( ; ) / * /If (OSTa s kDe l Re q (OS_PRIO_SELF ) = OS_TASK_DEL_REQ) ( 1 );OSTa s kDe l (OS_PRIO_SELF ) ; e l s e / * /vo i d Re qu e s t o r Ta s k ( vo i d *pd a t a )8U e rr ;pd a t a = pd a t a ; f o r ( ; ) / * /i f ( Ta s kToBeDe le t e d () ) ( 1 wh il e (OSTa skDe l Re q ( TASK_TO_

29、DEL_PR IO) ! = OS_TASK_NOT_EXI ST ) ( 2 )OST imeDl y ( 1 ) ;/ * / L 4.14OSTa s kDe l Req ( ).( 1 )( 3 )4-198U OSTa s kDe l Re q (8U p r i o )s;8Ue rr ; OS_TCB*p t c b ;i f ( p r i o = OS_ IDLE_PR IO) r e t u r n (OS_TASK_DEL_ IDLE ) ;i f ( p r i o = OS_LOWEST_PR IO & p r i o ! = OS_PRIO_SELF ) ( 2 )

30、r e t u r n (OS_PRIO_ INVAL ID) ;i f ( p r i o = OS_PRIO_SELF ) OS_ENTER_CR I T ICAL () ;s= OSTCBCu r-OSTCBDe l Re q ;( 5 )( 6 ) OSTaskChangePrio()4-20OS_EXI T_CR I T ICAL () ;r e t u r n ( s) ; e l s e OS_ENTER_CR I T ICAL () ;i f ( p t c b = OSTCBP r i oTb l p r i o ) ! = (OS_TCB * ) 0 ) ( 4 )p t

31、c b - OSTCBD e l Re q = OS_TASK_DEL_REQ ; e rr= OS_NO_ERR ; e l s e e rr= OS_TASK_NOT_EXI ST ;OS_EXI T_CR I T ICAL () ;r e t u r n ( e rr) ; L 4.15OSTa s kChangePr i o ( ).( 1 )( 2 )4-218U OSTa s kCh a ng e P r i o (8U o l dp r i o ,8U n ewp r i o )OS_TCB*p t c b ; OS_EVENT *p e v e n t; 8Ux ;8Uy ;8

32、Ub it x ;8Ub it y ;i f ( o l dp r i o = OS_LOWEST_PR IO & o l dp r i o ! = OS_PRIO_SELF )| n ewp r i o = OS_LOWEST_PR IO) r e t u r n (OS_PRIO_ INVAL ID) ;OS_ENTER_CR I T ICAL () ;i f (OSTCBP r i oTb l n ewp r i o ! = (OS_TCB * ) 0 ) OS_EXI T_CR I T ICAL () ;r e t u r n (OS_PRIO_EXI ST ) ; e l s e 4

33、-22OSTCBPrioTblnewprio = (OS_TCB *)1;(3) OS_EXIT_CRITICAL();y= newprio 3;(4)bity = OSMapTbly;x= newprio & 0 x07; bitx = OSMapTblx; OS_ENTER_CRITICAL();if (oldprio = OS_PRIO_SELF) (5) oldprio = OSTCBCur-OSTCBPrio;if (ptcb = OSTCBPrioTbloldprio) != (OS_TCB *)0) (6) OSTCBPrioTbloldprio = (OS_TCB *)0;(7

34、) if (OSRdyTblptcb-OSTCBY & ptcb-OSTCBBitX) (8) if (OSRdyTblptcb-OSTCBY &= ptcb-OSTCBBitX) = 0) (9)OSRdyGrp &= ptcb-OSTCBBitY;OSRdyGrp|= bity;(10)OSRdyTbly |= bitx; else if (pevent = ptcb-OSTCBEventPtr) != (OS_EVENT *)0) (11) if (pevent-OSEventTblptcb-OSTCBY &=ptcb-OSTCBBitX) = 0) pevent-OSEventGrp

35、&= ptcb-OSTCBBitY;pevent-OSEventGrp|= bity;(12) pevent-OSEventTbly |= bitx;OSTCBPrioTblnewprio = ptcb;(13)ptcb-OSTCBPrio= newprio;(14)ptcb-OSTCBY= y;(15)ptcb-OSTCBX= x;ptcb-OSTCBBitY= bity;ptcb-OSTCBBitX= bitx; OS_EXIT_CRITICAL();(16 )(17 ) OSTaskSuspend() L 4.16OSTa s kSus pend ( ).4-238U OSTa s kS

36、u s p e nd (8U p r i o )OSSc h e d () ;r e t u r n (OS_NO_ERR ) ; e l s e OSTCBP r i oTb l n ewp r i o = (OS_TCB * ) 0 ; OS_EXI T_CR I T ICAL () ;r e t u r n (OS_PRIO_ERR ) ;( 1 )( 3 )( 4 )( 5 )( 6 )( 7 )( 8 )4-24s e l f ;OS_TCB*p t c b ;i f ( p r i o = OS_ IDLE_PR IO) r e t u r n (OS_TASK_SUSPEND_

37、IDLE ) ;i f ( p r i o = OS_LOWEST_PR IO & p r i o ! = OS_PRIO_SELF ) ( 2 )r e t u r n (OS_PRIO_ INVAL ID) ;OS_ENTER_CR I T ICAL () ;i f ( p r i o = OS_PRIO_SELF ) p r i o = OSTCBCu r-OSTCBP r i o ; s e l f = TRUE ; e l s e i f ( p r i o = OSTCBCu r- OSTCBP r i o ) s e l f = TRUE ; e l s e s e l f =

38、FALSE ;i f ( p t c b = OSTCBP r i oTb l p r i o ) = (OS_TCB * ) 0 ) OS_EXI T_CR I T ICAL () ;r e t u r n (OS_TASK_SUSPEND_PR IO) ; e l s e i f (OSRdyTb l p tc b - OSTCBY &= p t c b - OSTCBB it X) = 0 ) OSRdyGr p &= p t c b - OSTCBB it Y;p t c b - OSTCBS| = OS_S_SUSPEND ; OS_EXI T_CR I T ICAL () ;i f ( s e l f = TRUE ) OSSc h e d () ;r e t u r n (OS_NO_ERR ) ; OSTaskResume()L 4.17OSTa s kRe sume ( ). ( 1 )( 2 )( 3 )( 5 )( 6 )4-258U OSTa s kRe s ume (8U p r i o )OS_TCB*p t c b ;If ( p r i o = OS_LOWEST_

溫馨提示

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

評論

0/150

提交評論