μCOSII任務(wù)建立與管理_第1頁
μCOSII任務(wù)建立與管理_第2頁
μCOSII任務(wù)建立與管理_第3頁
μCOSII任務(wù)建立與管理_第4頁
μCOSII任務(wù)建立與管理_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

μCOS-II任務(wù)創(chuàng)建管理任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)設(shè)計在基于實時操作系統(tǒng)的應(yīng)用程序設(shè)計中,任務(wù)設(shè)計是整個應(yīng)用程序的基礎(chǔ),其它軟件設(shè)計工作都是圍繞任務(wù)設(shè)計來展開。任務(wù)設(shè)計應(yīng)用程序設(shè)計“任務(wù)函數(shù)”和相關(guān)的數(shù)據(jù)結(jié)構(gòu)其他軟件工作任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的分類任務(wù)單次執(zhí)行類事件觸發(fā)類周期執(zhí)行類按照執(zhí)行方式分類任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的分類1.單次執(zhí)行類任務(wù)voidMyTask(void*pdata){

進(jìn)行準(zhǔn)備工作的代碼;

任務(wù)實體代碼;

調(diào)用任務(wù)刪除函數(shù);}運行創(chuàng)建刪除單次執(zhí)行類任務(wù)定義和初始化變量及硬件設(shè)備

完成該任務(wù)的具體功能

將自己刪除,操作系統(tǒng)將不再管理它

任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的分類執(zhí)行狀態(tài)等待狀態(tài)就緒狀態(tài)voidMyTask(void*pdata){

進(jìn)行準(zhǔn)備工作的代碼;while(1){

任務(wù)實體代碼;

調(diào)用系統(tǒng)延時函數(shù);}}延時時間到2.周期執(zhí)行類任務(wù)任務(wù)優(yōu)先級足夠高任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的分類3.事件觸發(fā)執(zhí)行類任務(wù)voidMyTask(void*pdata){

進(jìn)行準(zhǔn)備工作的代碼;while(1){

調(diào)用獲取事件的函數(shù);

任務(wù)實體代碼;}}等待信號量或消息運行狀態(tài)等待狀態(tài)運行狀態(tài)就緒狀態(tài)

任務(wù)優(yōu)先級足夠高消息完成具體功能任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的劃分1.任務(wù)劃分的目標(biāo)在對一個具體的嵌入式應(yīng)用系統(tǒng)進(jìn)行任務(wù)劃分時,可以有不同的任務(wù)劃分方案。為了選擇最佳劃分方案,就必須知道任務(wù)劃分的目標(biāo)。高效率的系統(tǒng)43211.首要目標(biāo)是滿足“實時性”指標(biāo):即使在最壞的情況下,系統(tǒng)中所有對實時性有要求的功能都能夠正常實現(xiàn);3.簡化軟件系統(tǒng):一個任務(wù)要實現(xiàn)其功能,除了需要操作系統(tǒng)的調(diào)度功能支持外,還需要操作系統(tǒng)的其它服務(wù)功能支持,合理劃分任務(wù),可以減少對操作系統(tǒng)的服務(wù)要求,簡化軟件系統(tǒng);4.降低資源需求:合理劃分任務(wù),減少或簡化任務(wù)之間的同步和通信需求,就可以減少相應(yīng)數(shù)據(jù)結(jié)構(gòu)的內(nèi)存規(guī)模,從而降低對系統(tǒng)資源的需求。2.任務(wù)數(shù)目合理:對于同一個應(yīng)用系統(tǒng),合理的合并一些任務(wù),使任務(wù)數(shù)目適當(dāng)少一些還是比較有利;傳遞性:信息傳遞的上游任務(wù)的優(yōu)先級高于下游任務(wù)的優(yōu)先級。如信號采集任務(wù)的優(yōu)先級高于數(shù)據(jù)處理任務(wù)的優(yōu)先級。緊迫性:因為緊迫任務(wù)對響應(yīng)時間有嚴(yán)格要求,在所有緊迫任務(wù)中,按響應(yīng)時間要求排序,越緊迫的任務(wù)安排的優(yōu)先級越高。緊迫任務(wù)通常與ISR關(guān)聯(lián);關(guān)鍵性:任務(wù)越關(guān)鍵安排的優(yōu)先級越高,以保障其執(zhí)行機(jī)會;中斷關(guān)聯(lián)性:與中斷服務(wù)程序(ISR)有關(guān)聯(lián)的任務(wù)應(yīng)該安排盡可能高的優(yōu)先級,以便及時處理異步事件,提高系統(tǒng)的實時性。如果優(yōu)先級安排得比較低,CPU有可能被優(yōu)先級比較高的任務(wù)長期占用,以致于在第二次中斷發(fā)生時連第一次中斷還沒有處理,產(chǎn)生信號丟失現(xiàn)象;頻繁性:對于周期性任務(wù),執(zhí)行越頻繁,則周期越短,允許耽誤的時間也越短,故應(yīng)該安排的優(yōu)先級也越高,以保障及時得到執(zhí)行;快捷性:在前面各項條件相近時,越快捷(耗時短)的任務(wù)安排的優(yōu)先級越高,以使其它就緒任務(wù)的延時縮短;任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的優(yōu)先級任務(wù)的優(yōu)先級安排原則如下:

緊迫性任務(wù)優(yōu)先級

關(guān)鍵性中斷關(guān)聯(lián)性快捷性頻繁性傳遞性任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的優(yōu)先級uC/OS-II的每個任務(wù)都必須有唯一的優(yōu)先級。uC/OS-II最多可以管理64個優(yōu)先級別分配給64個任務(wù)。uC/OS-II中用一個8b的整型數(shù)來表示優(yōu)先級別,數(shù)字越小,優(yōu)先級越高,prio=0的任務(wù)優(yōu)先級最高。uC/OS-II中使用任務(wù)的優(yōu)先級(prio)作為任務(wù)句柄。用戶通過修改OS_CFG.H中的宏定義常數(shù)OS_LOWEST_PRIO的值,約定本用戶系統(tǒng)的最大優(yōu)先級數(shù)。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)一個無限循環(huán)voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)一個無限循環(huán)

voidYourTask(void*pdata) (1)

{

for(;;){ (2)

/*用戶代碼*/

調(diào)用uC/OS-II的某種系統(tǒng)服務(wù):

OSMboxPend();

OSQPend();

OSSemPend();

OSTaskDel(OS_PRIO_SELF);

OSTaskSuspend(OS_PRIO_SELF);

OSTimeDly();

OSTimeDlyHMSM();

/*用戶代碼*/

}

}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶應(yīng)用程序的一般結(jié)構(gòu)“用戶任務(wù)”代碼形式上很像C函數(shù),但他不是函數(shù)!“任務(wù)”不能被主函數(shù)main()或其他函數(shù)調(diào)用,只能被主函數(shù)或已激活任務(wù)創(chuàng)建。任務(wù)的運行由操作系統(tǒng)調(diào)度管理。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶應(yīng)用程序的一般結(jié)構(gòu)voidMyTask1(void*pdata){……}voidMyTask2(void*pdata){……}voidmain(){……

OSInit();……

OSTaskCreate(MyTask1,……);

OSTaskCreate(MyTask2,……);……

OSStart();……}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

OSTaskCreate()函數(shù)原型:OSTaskCreate()函數(shù)原型:

INT8UOSTaskCreate( void(*task)(void*pd),

//指向任務(wù)的指針

void*pdata,

//傳遞給任務(wù)的參數(shù)

OS_STK*ptos,

//任務(wù)堆棧棧頂?shù)闹羔?/p>

INT8Uprio

//任務(wù)的優(yōu)先級別

)任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

OSTaskCreate()函數(shù)原型:INT8UOSTaskCreate(void(*task)(void*pd),//指向任務(wù)指針void*pdata,//傳遞給任務(wù)的參數(shù)OS_STK*ptos,//指向任務(wù)堆棧棧頂指針I(yè)NT8Uprio//任務(wù)優(yōu)先級){

void*psp;

INT8Uerr;

if(prio>OS_LOWEST_PRIO)//檢測任務(wù)優(yōu)先級是否合法{

return(OS_PRIO_INVALID);

}

OS_ENTER_CRITICAL();

if(OSTCBPrioTbl[prio]==(OS_TCB*)0)//確認(rèn)優(yōu)先級未被使用{

OSTCBPrioTbl[prio]=(OS_TCB*)1;//保留優(yōu)先級

OS_EXIT_CRITICAL();

psp=(void*)OSTaskStkInit(task,pdata,ptos,0);//初始化任務(wù)堆棧

err=OSTCBInit(prio,psp,(void*)0,0,0,(void*)0,0);//獲得并初始化任務(wù)控制塊

if(err==OS_NO_ERR){

OS_ENTER_CRITICAL();

OSTaskCtr++;// 任務(wù)計數(shù)器加1

OSTaskCreateHook(OSTCBPrioTbl[prio]);

OS_EXIT_CRITICAL();

if(OSRunning){

OSSched(); //任務(wù)調(diào)度

}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

OSTaskCreate()函數(shù)原型:任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

OSTaskCreate()函數(shù)原型:

}else{

OS_ENTER_CRITICAL();

OSTCBPrioTbl[prio]=(OS_TCB*)0;//放棄任務(wù)

OS_EXIT_CRITICAL();

}

return(err);

}else{

OS_EXIT_CRITICAL();

return(OS_PRIO_EXIST);

}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)其他

函數(shù)原型:堆棧檢驗,OSTaskStkChk()刪除任務(wù),OSTaskDel()請求刪除任務(wù),OSTaskDelReq()改變?nèi)蝿?wù)的優(yōu)先級,OSTaskChangePrio()掛起任務(wù),OSTaskSuspend()恢復(fù)任務(wù),OSTaskResume()

任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

OSTaskCreate()函數(shù)使用舉例:定義任務(wù)task_Avoidtask_A(void*pdata){……;

//任務(wù)初始化部分

while(1){……;//任務(wù)功能代碼

}}在系統(tǒng)“創(chuàng)建”任務(wù)task_Avoidmain(void){

OSInit();//系統(tǒng)初始化部分

……

OSTaskCreate(task_A,void*0,&MystackTop,8);

OSStart();}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的基本概念系統(tǒng)任務(wù)空閑任務(wù)(OSTaskIdel())統(tǒng)計任務(wù)(OSTaskStat())原型:voidOSTaskIdel(void*pdata)原型:voidOSTaskStat(void*pdata)任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的基本概念空閑任務(wù)(OSTaskIdel())使用說明:

1、uC/OS-II規(guī)定用戶程序中必須使OSTaskIdel。

2、該任務(wù)不能用軟件刪除。

3、該任務(wù)是uC/OS-II初始化時自動創(chuàng)建,其任務(wù)優(yōu)先 級固定為最低級,用戶也可修改該任務(wù)的業(yè)務(wù)。

4、目的----使CPU在沒有用戶任務(wù)可執(zhí)行時也有事可 做。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)的基本概念統(tǒng)計任務(wù)(OSTaskStat())使用說明:

1、功能完成用戶任務(wù)CPU使用率的統(tǒng)計,結(jié)果以百分 比的形式存放在變量OSCPUsage

中。

2、該任務(wù)用戶可選擇使用。OS_CFG.H文件中的常數(shù) OS_TASK_STAT_EN設(shè)置為1,使能該函數(shù)。

3、用戶在OS_CFG.H中使能該任務(wù)后,系統(tǒng)自動創(chuàng)建 該任務(wù),但在用戶使用統(tǒng)計數(shù)據(jù)前必須調(diào)用系統(tǒng) 函數(shù)OSStatInit()先進(jìn)行初始化。

4、該任務(wù)固定擁有次末任務(wù)優(yōu)先級。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)堆棧堆棧----FIFO訪問原則組織的連續(xù)存儲器。任務(wù)堆棧在uC/OS-II中的應(yīng)用:任務(wù)堆棧是任務(wù)的三大組成部分之一。保存CPU寄存器現(xiàn)場(R0~R12、LR、SPSR等)。本Task的私有數(shù)據(jù)。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)堆棧的創(chuàng)建-----在創(chuàng)建任務(wù)的同時,任務(wù)堆棧即被創(chuàng)建。舉例:#defineMyTaskStkSize64OS_STKMyTaskStk[MyTaskStkSize]//在OS_CPU.H中定義OS_STK…… //typedefINT32UOS_STKINT8UOSTaskCreate( void(*task)(void*pd),//指向任務(wù)的指針

void*pdata, //傳遞給任務(wù)的參數(shù)

MyTaskStk[MyTaskStkSize

-1]

//任務(wù)堆棧棧頂?shù)闹羔?/p>

INT8Uprio

//任務(wù)的優(yōu)先級別

)任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)堆棧的創(chuàng)建任務(wù)堆棧的使用注意事項__存在兩種堆棧形式遞增堆棧----進(jìn)棧操作向大地址方向發(fā)展。遞減堆棧----進(jìn)棧操作向小地址方向發(fā)展。OSTaskCreate( ……

&MyTaskStk[StkSize-1], …… )OSTaskCreate( ……

&MyTaskStk[0], …… )備注:利用條件編譯技術(shù)和OS_CPU.H中的宏定義常數(shù)OS_STK_GROWTH編寫易移植用戶系統(tǒng);“1”---遞減堆棧forARMCPU。任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)任務(wù)完成后的自我刪除當(dāng)任務(wù)完成后,任務(wù)可以自我刪除任務(wù)代碼并非真的刪除了,系統(tǒng)只是簡單地不再理會這個任務(wù)這個任務(wù)的代碼也不會再運行了,即使任務(wù)調(diào)用了OSTaskDel(),這個任務(wù)也絕不會返回

voidYourTask(void*pdata)

{

/*用戶代碼*/

OSTaskDel(OS_PRIO_SELF);

}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例通過μC/OS-II建立一個現(xiàn)實任務(wù):分別顯示“任務(wù)”和“finish”任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例1#include"includes.h"#defineTASK_STK_SIZE512 //任務(wù)堆棧長度OS_STKAppStartTask1tk[TASK_STK_SIZE];//定義任務(wù)堆棧區(qū)#defineTASK_START_PRIO5staticvoidAppStartTask1(void*p_arg);//聲明一個任務(wù)任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例1voidmain(){

OSInit();/*初始化uC/OS-II內(nèi)核"*/

OSTaskCreateExt(AppStartTask1,(void*)0,(OS_STK*)&AppStartTask1tk[TASK_STK_SIZE-1],TASK_START_PRIO,TASK_START_PRIO,(OS_STK*)&AppStartTask1tk[0],TASK_STK_SIZE,(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

OSStart();//啟動uC/OS-II多任務(wù)管理}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例1voidAppStartTask1(void*p_arg){

p_arg=p_arg;

OSStatInit();while(1)//任務(wù)循環(huán)

{

OS_Printf(“任務(wù)1\n");

OS_Printf(“finish\n"); OSTimeDlyHMSM(0,0,1,0);//延時1s

}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例現(xiàn)象1如何建立不同優(yōu)先級的不同任務(wù)?任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2通過μC/OS-II建立兩個現(xiàn)實任務(wù):任務(wù)顯示字符M的優(yōu)先級高顯示Y的優(yōu)先級低任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2#include<includes.h>#defineTASK_STK_SIZE128#defineTASK_START_PRIO5OS_STKAppStartTask1tk[TASK_STK_SIZE];OS_STKAppStartTask2tk[TASK_STK_SIZE];staticvoidAppStartTask1(void*p_arg);staticvoidAppStartTask2(void*p_arg1);任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2voidmain(){

OSInit();OSTaskCreateExt(AppStartTask1,(void*)0,(OS_STK*)&AppStartTask1tk[TASK_STK_SIZE-1],TASK_START_PRIO,TASK_START_PRIO,(OS_STK*)&AppStartTask1tk[0],TASK_STK_SIZE,(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

OSTaskCreateExt(AppStartTask2,(void*)1,(OS_STK*)&AppStartTask2tk[TASK_STK_SIZE-1],6,6,(OS_STK*)&AppStartTask2tk[0],TASK_STK_SIZE,(void*)2,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

OSStart();}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2建立任務(wù)1voidAppStartTask1(void*p_arg){

p_arg=p_arg;

OSStatInit();while(1) {

OS_Printf("M\n"); OSTimeDlyHMSM(0,0,1,0);//延時1秒}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2建立任務(wù)2voidAppStartTask2(void*p_arg1){p_arg1=p_arg1;

OSStatInit();while(1) {

OS_Printf(“Y\n"); OSTimeDlyHMSM(0,0,1,0);//延時1秒}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2現(xiàn)象建立不同優(yōu)先級的不同任務(wù)的時間延時不一樣,會出現(xiàn)什么情況?任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例3通過μC/OS-II建立兩個現(xiàn)實任務(wù):建立任務(wù)1顯示字符M同時在任務(wù)1里建立任務(wù)2,且顯示Y任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例3#include<includes.h>#defineTASK_STK_SIZE128#defineTASK_START_PRIO5OS_STKAppStartTask1tk[TASK_STK_SIZE];OS_STKAppStartTask2tk[TASK_STK_SIZE];staticvoidAppStartTask1(void*p_arg);staticvoidAppStartTask2(void*p_arg1);任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例3voidmain(){

OSInit();OSTaskCreateExt(AppStartTask1,(void*)0,(OS_STK*)&AppStartTask1tk[TASK_STK_SIZE-1],TASK_START_PRIO,TASK_START_PRIO,(OS_STK*)&AppStartTask1tk[0],TASK_STK_SIZE,(void*)0,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

OSStart();}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2voidAppStartTask1(void*p_arg){

p_arg=p_arg;OSStatInit();OSTaskCreateExt(AppStartTask2,(void*)1,(OS_STK*)&AppStartTask2tk[TASK_STK_SIZE-1],7,7,(OS_STK*)&AppStartTask2tk[0],TASK_STK_SIZE,(void*)1,OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

while(1) {

OS_Printf("M"); OSTimeDlyHMSM(0,0,3,0);}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例2voidAppStartTask2(void*p_arg1){p_arg1=p_arg1;OSStatInit();while(1) {

OS_Printf("Y"); OSTimeDlyHMSM(0,0,1,0);

}}任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例3現(xiàn)象任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例4通過μC/OS-II建立兩個現(xiàn)實任務(wù):任務(wù)1顯示字符M(優(yōu)先級高)任務(wù)2顯示字符Y(優(yōu)先級低)在任務(wù)執(zhí)行10次后掛起任務(wù)1,20次后重新執(zhí)行任務(wù)1任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例4掛起函數(shù):OSTaskSuspend(prio);恢復(fù)任務(wù):OSTaskResume(prio);其中prio為任務(wù)的優(yōu)先級任務(wù)設(shè)計|μC/OS-II程序設(shè)計基礎(chǔ)

用戶任務(wù)程序例4#include<includes.h>#defineTASK_STK_SIZE128#defineTASK_START_PRIO5OS_STKAppStartTask1tk[TASK_STK_SIZE];OS_STKAppStartTask2tk[TASK_STK_SIZE];staticvoidAppStartTask1(void*p_arg);staticvoidAppStartTask2(void*p_arg1);任務(wù)設(shè)計|μC

溫馨提示

  • 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

提交評論