




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C/OS-II中的任務(wù)管理 任務(wù)的狀態(tài)及其轉(zhuǎn)換正在運(yùn)行的任務(wù),需要等待一段時(shí)間或需要等待一個(gè)事件發(fā)生再運(yùn)行時(shí),該任務(wù)就會(huì)把CPU的使用權(quán)讓給別的任務(wù)而使任務(wù)進(jìn)入等待狀態(tài)。 任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時(shí)的狀態(tài)叫做任務(wù)的睡眠狀態(tài) 系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進(jìn)行了就緒登記,這時(shí)任務(wù)的狀態(tài)叫做就緒狀態(tài)。 處于就緒狀態(tài)的任務(wù)如果經(jīng)調(diào)度器判斷獲得了CPU的使用權(quán),則任務(wù)就進(jìn)入運(yùn)行狀態(tài) 一個(gè)正在運(yùn)行的任務(wù)一旦響應(yīng)中斷申請(qǐng)就會(huì)中止運(yùn)行而去執(zhí)行中斷服務(wù)程序,這時(shí)任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài) 前面談到,一個(gè)任務(wù)的任務(wù)控制塊的主要作用就是保存該任務(wù)的虛擬處理器的堆棧指針寄存器SP。
2、其實(shí),隨著任務(wù)管理工作的復(fù)雜性的提高,它還應(yīng)該保存一些其他信息。任務(wù)控制塊任務(wù)在系統(tǒng)中的身份證 由于系統(tǒng)存在著多個(gè)任務(wù),于是系統(tǒng)如何來識(shí)別并管理一個(gè)任務(wù)就是一個(gè)需要解決的問題。識(shí)別一個(gè)任務(wù)的最直接的辦法是為每一個(gè)任務(wù)起一個(gè)名稱。 由于C/OS-II中的任務(wù)都有一個(gè)惟一的優(yōu)先級(jí)別,因此C/OS-II是用任務(wù)的優(yōu)先級(jí)來作為任務(wù)的標(biāo)識(shí)的。 所以,任務(wù)控制塊還要來保存該任務(wù)的優(yōu)先級(jí)別。另外,前面也談到,一個(gè)任務(wù)在不同的時(shí)刻還處于不同的狀態(tài),顯然,記錄了任務(wù)狀態(tài)的數(shù)據(jù)也應(yīng)該保存到任務(wù)控制塊中。基于上述原因,系統(tǒng)必須為每個(gè)任務(wù)創(chuàng)建一個(gè)保存與該任務(wù)有關(guān)的相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)就叫做該任務(wù)的任務(wù)控制
3、塊(TCB)。任務(wù)控制塊結(jié)構(gòu)的主要成員typedef struct os_tcb OS_STK *OSTCBStkPtr; /指向任務(wù)堆棧棧頂?shù)闹羔?INT8U OSTCBStat;/任務(wù)的當(dāng)前狀態(tài)標(biāo)志 INT8U OSTCBPrio; /任務(wù)的優(yōu)先級(jí)別 OS_TCB; 任務(wù)控制塊是不是像我們?nèi)嗽谝粋€(gè)國(guó)家中的身份證?(其實(shí),系統(tǒng)中的所有資源都應(yīng)該有身份證。)任務(wù)在內(nèi)存中的結(jié)構(gòu) 用戶任務(wù)代碼的 一般結(jié)構(gòu) void MyTask(void *pdata) for (;) 可以被中斷的用戶代碼; OS_ENTER_CRITICAL( );/進(jìn)入臨界段(關(guān)中斷) 不可以被中斷的用戶代碼; OS_EXI
4、T_CRITICAL( ); /退出臨界段(開中斷) 可以被中斷的用戶代碼; 臨界段無限循環(huán)于是可以這樣說,C/OS-II任務(wù)的代碼結(jié)構(gòu)是一個(gè)可以帶有臨界段的無限循環(huán)。 系統(tǒng)提供的空閑任務(wù) 在多任務(wù)系統(tǒng)運(yùn)行時(shí),系統(tǒng)經(jīng)常會(huì)在某個(gè)時(shí)間內(nèi)無用戶任務(wù)可運(yùn)行而處于所謂的空閑狀態(tài),為了使CPU在沒有用戶任務(wù)可執(zhí)行的時(shí)候有事可做,C/OS-II提供了一個(gè)叫做空閑任務(wù)OSTaskIdle( )的系統(tǒng)任務(wù) void OSTaskIdle(void* pdata)# if OS_CRITICAL_METHOD = = 3OS_CPU_SR cpu_sr;#endifpdata = pdata;/防止某些編譯器報(bào)錯(cuò)
5、for(;)OS_ENTER_CRITICAL( );/關(guān)閉中斷OSdleCtr+;/計(jì)數(shù)OS_EXIT_CRITICAL( );/開放中斷 空閑任務(wù)只是做了一個(gè)計(jì)數(shù)工作注意!空閑任務(wù)中沒有調(diào)用任務(wù)延時(shí)函數(shù)C/OS-II規(guī)定,一個(gè)用戶應(yīng)用程序必須使用這個(gè)空閑任務(wù),而且這個(gè)任務(wù)是不能用軟件來刪除的 系統(tǒng)提供的另一個(gè)任務(wù) 統(tǒng)計(jì)任務(wù)C/OS-II提供的另一個(gè)系統(tǒng)任務(wù)是統(tǒng)計(jì)任務(wù)OSTaskStat( )。這個(gè)統(tǒng)計(jì)任務(wù)每秒計(jì)算一次CPU在單位時(shí)間內(nèi)被使用的時(shí)間,并把計(jì)算結(jié)果以百分比的形式存放在變量OSCPUsage中,以便應(yīng)用程序通過訪問它來了解CPU的利用率,所以這個(gè)系統(tǒng)任務(wù)OSTaskStat( )
6、叫做統(tǒng)計(jì)任務(wù) 任務(wù)的優(yōu)先權(quán) 及優(yōu)先級(jí)別 C/OS_II 把任務(wù)的優(yōu)先權(quán)分為64個(gè)優(yōu)先級(jí)別,每一個(gè)級(jí)別都用一個(gè)數(shù)字來表示。數(shù)字0表示任務(wù)的優(yōu)先級(jí)別最高,數(shù)字越大則表示任務(wù)的優(yōu)先級(jí)別越低 用戶可以根據(jù)應(yīng)用程序的需要,在文件OS_CFG.H中通過給表示最低優(yōu)先級(jí)別的常數(shù)OS_LOWEST_PRIO賦值的方法,來說明應(yīng)用程序中任務(wù)優(yōu)先級(jí)別的數(shù)目。該常數(shù)一旦被定義,則意味著系統(tǒng)中可供使用的優(yōu)先級(jí)別為:0,1,2,OS_LOWEST_PRIO,共OS_LOWEST_PRIO+1個(gè) 固定地,系統(tǒng)總是把最低優(yōu)先級(jí)別OS_LOWEST_PRIO自動(dòng)賦給空閑任務(wù)。如果應(yīng)用程序中還使用了統(tǒng)計(jì)任務(wù),系統(tǒng)則會(huì)把優(yōu)先級(jí)別
7、OS_LOWEST_PRIO-1自動(dòng)賦給統(tǒng)計(jì)任務(wù),因此用戶任務(wù)可以使用的優(yōu)先級(jí)別是:0,1,2OS_LOWEST_PRIO-2,共OS_LOWEST_PRIO-1個(gè) 任 務(wù) 堆 棧 保存CPU寄存器中的內(nèi)容及存儲(chǔ)任務(wù)私有數(shù)據(jù)的需要,每個(gè)任務(wù)都應(yīng)該配有自己的堆棧,任務(wù)堆棧是任務(wù)的重要的組成部分 在應(yīng)用程序中定義任務(wù)堆棧的棧區(qū)非常簡(jiǎn)單,即定義一個(gè)OS_STK類型的一個(gè)數(shù)組并在創(chuàng)建一個(gè)任務(wù)時(shí)把這個(gè)數(shù)組的地址賦給該任務(wù)就可以了。例如:/定義堆棧的長(zhǎng)度#defineTASK_STK_SIZE 512/定義一個(gè)數(shù)組來作為任務(wù)堆棧OS_STK TaskStkTASK_STK_SIZE;typedef uns
8、igned int OS_STK;/這是系統(tǒng)定義的一個(gè)數(shù)據(jù)類型 void main(void)OSTaskCreate(MyTask, /任務(wù)的指針&MyTaskAgu, /傳遞給任務(wù)的參數(shù)& MyTaskStkMyTaskStkN-1,/任務(wù)堆棧棧頂?shù)刂?0/任務(wù)的優(yōu)先級(jí)別);在創(chuàng)建用戶任務(wù)時(shí),要傳遞任務(wù)的堆棧指針和任務(wù)優(yōu)先級(jí)別使用函數(shù)OSTaskCreate( )創(chuàng)建任務(wù)時(shí),一定要注意所使用的處理器對(duì)堆棧增長(zhǎng)方向的支持是向上的還是向下的 任務(wù)堆棧的初始化 應(yīng)用程序在創(chuàng)建一個(gè)新任務(wù)的時(shí)候,必須把在系統(tǒng)啟動(dòng)這個(gè)任務(wù)時(shí)CPU各寄存器所需要的初始數(shù)據(jù)(任務(wù)指針、任務(wù)堆棧指針、程序狀態(tài)字等等),事先
9、存放在任務(wù)的堆棧中 C/OS-II在創(chuàng)建任務(wù)函數(shù)OSTaskCreate( )中通過調(diào)用任務(wù)堆棧初始化函數(shù)OSTaskStkInit( )來完成任務(wù)堆棧初始化工作的 它的原型如下:OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdato, OS_STK *ptos, INT16U opt);由于各種處理器的寄存器及對(duì)堆棧的操作方式不盡相同,因此該函數(shù)需要用戶在進(jìn)行C/OS-II的移植時(shí),按所使用的處理器由用戶來編寫。實(shí)現(xiàn)這個(gè)函數(shù)的具體細(xì)節(jié),將在本書有關(guān)C/OS-II移植的章節(jié)中做進(jìn)一步的介紹 其實(shí),任務(wù)堆棧的初始化就是對(duì)該任務(wù)的虛擬處理
10、器的初始化(復(fù)位)。 任務(wù)控制塊 (OS_TCB)及任務(wù)控制塊鏈表 C/OS-II用來記錄任務(wù)的堆棧指針、任務(wù)的當(dāng)前狀態(tài)、任務(wù)的優(yōu)先級(jí)別等一些與任務(wù)管理有關(guān)的屬性的表就叫做任務(wù)控制塊 任務(wù)控制塊就相當(dāng)于是一個(gè)任務(wù)的身份證,沒有任務(wù)控制塊的任務(wù)是不能被系統(tǒng)承認(rèn)和管理的 任務(wù)控制塊結(jié)構(gòu)的主要成員typedef struct os_tcb OS_STK *OSTCBStkPtr; /指向任務(wù)堆棧棧頂?shù)闹羔?struct os_tcb *OSTCBNext;/指向后一個(gè)任務(wù)控制塊的指針 struct os_tcb *OSTCBPrev; /指向前一個(gè)任務(wù)控制塊的指針 INT16U OSTCBDly;
11、/任務(wù)等待的時(shí)限(節(jié)拍數(shù)) INT8U OSTCBStat;/任務(wù)的當(dāng)前狀態(tài)標(biāo)志 INT8U OSTCBPrio; /任務(wù)的優(yōu)先級(jí)別 OS_TCB; 任務(wù)控制塊鏈表空任務(wù)控制塊鏈表當(dāng)應(yīng)用程序調(diào)用函數(shù)OSTaskCreate( )創(chuàng)建一個(gè)任務(wù)時(shí),這個(gè)函數(shù)會(huì)調(diào)用系統(tǒng)函數(shù)OSTCBInit ( )來為任務(wù)控制塊進(jìn)行初始化。這個(gè)函數(shù)首先為被創(chuàng)建任務(wù)從空任務(wù)控制塊鏈表獲取一個(gè)任務(wù)控制塊,然后用任務(wù)的屬性對(duì)任務(wù)控制塊各個(gè)成員進(jìn)行賦值,最后再把這個(gè)任務(wù)控制塊鏈入到任務(wù)控制塊鏈表的頭部 當(dāng)進(jìn)行系統(tǒng)初始化時(shí),初始化函數(shù)會(huì)按用戶提供的任務(wù)數(shù)為系統(tǒng)創(chuàng)建具有相應(yīng)數(shù)量的任務(wù)控制塊并把它們鏈接為一個(gè)鏈表。由于這些任務(wù)控制
12、塊還沒有對(duì)應(yīng)的任務(wù),故這個(gè)鏈表叫做空任務(wù)塊鏈表。即相當(dāng)于是一些空白的身份證。 任務(wù)就緒表及任務(wù)調(diào)度 多任務(wù)操作系統(tǒng)的核心工作就是任務(wù)調(diào)度。 所謂調(diào)度,就是通過一個(gè)算法在多個(gè)任務(wù)中確定該運(yùn)行的任務(wù),做這項(xiàng)工作的函數(shù)就叫做調(diào)度器。 C/OS_II進(jìn)行任務(wù)調(diào)度的思想是 “近似地每時(shí)每刻總是讓優(yōu)先級(jí)最高的就緒任務(wù)處于運(yùn)行狀態(tài)” 。為了保證這一點(diǎn),它在系統(tǒng)或用戶任務(wù)調(diào)用系統(tǒng)函數(shù)及執(zhí)行中斷服務(wù)程序結(jié)束時(shí)總是調(diào)用調(diào)度器,來確定應(yīng)該運(yùn)行的任務(wù)并運(yùn)行它 。C/OS_II進(jìn)行任務(wù)調(diào)度的依據(jù)就是任務(wù)就緒表 為了能夠使系統(tǒng)清楚地知道,系統(tǒng)中哪些任務(wù)已經(jīng)就緒,哪些還沒有就緒,C/OS_II在RAM中設(shè)立了一個(gè)記錄表,系
13、統(tǒng)中的每個(gè)任務(wù)都在這個(gè)表中占據(jù)一個(gè)位置,并用這個(gè)位置的狀態(tài)(1或者0)來表示任務(wù)是否處于就緒狀態(tài),這個(gè)表就叫做任務(wù)就緒狀態(tài)表,簡(jiǎn)稱叫任務(wù)就緒表 任務(wù)就緒表就是一個(gè)二維數(shù)組OSRdyTbl 為加快訪問任務(wù)就緒表的速度,系統(tǒng)定義了一個(gè)變量OSRdyGrp來表明就緒表每行中是否存在就緒任務(wù)。OSRdyTbl 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0
14、1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/01/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0OSRdyGrp D7 D6 D5 D4 D3 D2 D1 D0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0任務(wù)就緒表的示意圖01234567xy01234567OSRdyGrp D7 D6 D5 D4 D3 D2 D1 D0 11110000prio=29D7 D6 D5 D4 D3 D2 D1 D0 1D7 D6 D5 D4 D3 D2 D1 D0 1OSRdyTbl3 把
15、prio為29的任務(wù)置為就緒狀態(tài)YXOSRdyGrp | =OSMapTblprio3; OSRdyTblprio3 | = OSMapTblprio&0 x07; 在程序中,可以用類似下面的代碼把優(yōu)先級(jí)別為prio的任務(wù)置為就緒狀態(tài): OSRdyGrp | =OSMapTblprio3;OSRdyTblprio3 | = OSMapTblprio&0 x07;如果要使一個(gè)優(yōu)先級(jí)別為prio的任務(wù)脫離就緒狀態(tài)則可使用如下類似代碼:if(OSRdyTblprio3&=OSMapTblprio&0 x07)=0)OSRdyGrp&=OSMapTblprio3; OSRdyGrp D7 D6 D5
16、D4 D3 D2 D1 D0 11110000prio=29D7 D6 D5 D4 D3 D2 D1 D0 1D7 D6 D5 D4 D3 D2 D1 D0 1OSRdyTbly x = OSUnMapTalOSRdyTbly; 11000000000000y = OSUnMapTalOSRdyGrp; 圖5-6 在就緒表中查找最高優(yōu)先級(jí)別任務(wù)的過程從任務(wù)就緒表中獲取優(yōu)先級(jí)別最高的就緒任務(wù)可用如下類似的代碼:y = OSUnMapTalOSRdyGrp; /D5、D4、D3位x = OSUnMapTalOSRdyTbly; /D2、D1、D0位prio = (y3)+x;/優(yōu)先級(jí)別或y = O
17、SUnMapTblOSRdyGrp;prio = (INT8U)(y 3) + OSUnMapTblOSRdyTbly);優(yōu)先級(jí)判定表OSUnMapTbl256(os_core.c)INT8U const OSUnMapTbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0
18、, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0
19、, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0;舉例: 如OSRdyGrp的值為0
20、0101000B,即0X28,則查得OSUnMapTblOSRdyGrp的值是3,它相應(yīng)于OSRdyGrp中的第3位置1; 如OSRdyTbl3的值是11100100B,即0XE4,則查OSUnMapTblOSRdyTbl3的值是2,則進(jìn)入就緒態(tài)的最高任務(wù)優(yōu)先級(jí) Prio=3*8+2=26 小結(jié)系統(tǒng)通過查找任務(wù)就緒表來獲取待運(yùn)行任務(wù)的優(yōu)先級(jí)優(yōu)先級(jí)任務(wù)切換過程獲得待運(yùn)行任務(wù)的任務(wù)控制塊恢復(fù)待運(yùn)行任務(wù)的運(yùn)行環(huán)境處理器的PC=任務(wù)堆棧中的斷點(diǎn)地址處理器的SP=任務(wù)塊中保存的SP如何獲得待運(yùn)行任務(wù)的任務(wù)控制塊?根據(jù)就緒表獲得待運(yùn)行任務(wù)的任務(wù)控制塊指針其實(shí),調(diào)度器在進(jìn)行調(diào)度時(shí),在這個(gè)位置還要進(jìn)行一下判斷
21、:究竟是待運(yùn)行任務(wù)是否為當(dāng)前任務(wù),如果是,則不切換;如果不是才切換,而且還要保存被中止任務(wù)的運(yùn)行環(huán)境。1 任務(wù)切換宏 OS_TASK_SW( ) 任務(wù)切換就是中止正在運(yùn)行的任務(wù)(當(dāng)前任務(wù)),轉(zhuǎn)而去運(yùn)行另外一個(gè)任務(wù)的操作,當(dāng)然這個(gè)任務(wù)應(yīng)該是就緒任務(wù)中優(yōu)先級(jí)別最高的那個(gè)任務(wù) 先保護(hù)被中止任務(wù)的斷點(diǎn)數(shù)據(jù)后恢復(fù)待運(yùn)行任務(wù)的斷點(diǎn)數(shù)據(jù)不要企圖用PUSH和POP指令來使程序計(jì)數(shù)器PC壓棧和出棧,因?yàn)闆]有這樣的指令。只好變通一下了。中斷動(dòng)作和過程調(diào)用指令可以使PC壓棧;中斷返回指令可以使PC出棧。因此任務(wù)切換OSCtxSw( )必定是一個(gè)中斷服務(wù)程序。需要由宏OS_TASK_SW( ) 來引發(fā)一次中斷或者一次
22、調(diào)用來使OSCtxSw( )執(zhí)行任務(wù)切換工作調(diào)度時(shí)機(jī)很容易想到的調(diào)度時(shí)機(jī)就是定時(shí)調(diào)度。對(duì)于實(shí)時(shí)系統(tǒng)來說,應(yīng)該盡可能地實(shí)現(xiàn)即時(shí)調(diào)度。用函數(shù)OSTaskCreate( ) 創(chuàng)建任務(wù) 應(yīng)用程序通過調(diào)用OSTaskCreate( ) 函數(shù)來創(chuàng)建一個(gè)任務(wù),OSTaskCreate( )函數(shù)的原型如下:INT8U OSTaskCreate ( void (*task)(void *pd),/指向任務(wù)的指針 void *pdata,/傳遞給任務(wù)的參數(shù) OS_STK *ptos,/指向任務(wù)堆棧棧頂?shù)闹羔?INT8U prio/任務(wù)的優(yōu)先級(jí)) 創(chuàng)建任務(wù) 的一般方法 一般來說,任務(wù)可以在調(diào)用函數(shù)OSStart( )啟動(dòng)任務(wù)調(diào)度之前來創(chuàng)建,也可以在任務(wù)中來創(chuàng)建。但是,C/OS-II有一個(gè)規(guī)定:在調(diào)用啟動(dòng)任務(wù)函數(shù)OSStart( )之前,必須
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯維修漏水合同協(xié)議
- 甘肅承包合同協(xié)議書范本
- 申請(qǐng)延期簽合同協(xié)議
- 玻璃幕墻維護(hù)合同協(xié)議
- 生產(chǎn)供貨合作合同協(xié)議
- 玻璃鋼廠出租合同協(xié)議
- 白酒貼牌生產(chǎn)合同協(xié)議
- 環(huán)評(píng)類技術(shù)服務(wù)合同協(xié)議
- 疆模板腳手架合同協(xié)議
- 鹽城到洛陽高速合同協(xié)議
- 2022年四川省阿壩州中考數(shù)學(xué)試卷及解析
- 井蓋管理應(yīng)急預(yù)案
- 鵪鶉蛋脫殼機(jī)的設(shè)計(jì)
- 行為安全觀察behaviorbasedsafety研究復(fù)習(xí)過程
- 動(dòng)火作業(yè)風(fēng)險(xiǎn)告知牌
- 鍋爐專業(yè)術(shù)語解釋及英文翻譯對(duì)照
- 綜采工作面末采安全技術(shù)措施
- 《小石潭記》作業(yè)設(shè)計(jì)
- 密封圈定位套零件的機(jī)械加工夾具設(shè)計(jì)說明書
- 旅行社等級(jí)評(píng)定申報(bào)材料完整版
- 大粒種子精播機(jī)的設(shè)計(jì)【玉米、大豆快速精密雙行播種機(jī)含9張CAD圖紙】
評(píng)論
0/150
提交評(píng)論