




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、已經(jīng)得到認(rèn)證,現(xiàn)已經(jīng)通過(guò)美國(guó) FAA認(rèn)證。 PC SR R12 RL3 R15 R4 R5 RU 低地址 堆棧格式1 圖2堆棧格式2 摘要:卩C/OS-II是一種適用于嵌入式系統(tǒng)的搶占式實(shí)時(shí)多任務(wù)操作系統(tǒng),開(kāi) 放源代碼,便于學(xué)習(xí)和使用。介紹卩C/OS-II在任務(wù)級(jí)和中斷級(jí)的任務(wù)切換原理, 以及這一操作系統(tǒng)基 于嵌入式系統(tǒng)的對(duì)于中斷的處理;相對(duì)于內(nèi)存資源較少的 單片機(jī),著重討論一種優(yōu)化的實(shí)用堆棧格式和切換形式,以提高資源的利用率; 結(jié)合MSP43C單片機(jī),做具體的分析。 關(guān)鍵詞:實(shí)時(shí)多任務(wù)操作系統(tǒng) 卩C/OS MSP430中斷 堆棧 引言 在嵌入式操作系統(tǒng)領(lǐng)域,由Jean J. Labrosse
2、 開(kāi)發(fā)的卩C/OS,由于開(kāi)放源 代碼和強(qiáng)大而穩(wěn)定的功能,曾經(jīng)一度在嵌入式系統(tǒng)領(lǐng)域引起強(qiáng)烈反響。而其本人 也早已成為了嵌入式系統(tǒng)會(huì)議(美 國(guó))的顧問(wèn)委員會(huì)的成員。 不管是對(duì)于初學(xué)者,還是有經(jīng)驗(yàn)的工程師,卩C/OS開(kāi)放源代碼的方式使其 不但知其然,還知其所以然。通過(guò)對(duì)于系統(tǒng)內(nèi)部結(jié)構(gòu)的深入了解,能更加方便 地進(jìn)行開(kāi)發(fā)和調(diào)試;并且在這種條件下,完全可以按照設(shè)計(jì)要求進(jìn)行合理的裁減、 擴(kuò)充、配置和移植。通常,購(gòu)買(mǎi)RTOSi往需要一大筆資金,使得一般的 學(xué)習(xí)者 望而卻步;而 卩C/OS對(duì)于學(xué)校研究完全免費(fèi),只有在應(yīng)用于盈利項(xiàng)目時(shí)才需要 支付少量的版權(quán)費(fèi),特別適合一般使用者的學(xué)習(xí)、研究和開(kāi)發(fā)。自1992第1版
3、 問(wèn)世以來(lái),已有成千上萬(wàn)的開(kāi)發(fā)者把它成功地應(yīng)用于各種系統(tǒng),安全性和穩(wěn)定性 1卩C/OS-II的幾大組成部分 卩C/OS-II可以大致分成核 心、任務(wù)處理、時(shí)間處理、任務(wù) 同步與通信,CPU勺移植等5個(gè) 部分。 核心部分(OSCore.c)是操 作系統(tǒng)的處理核心,包括操作系 統(tǒng)初始化、操作系統(tǒng)運(yùn)行、中斷 進(jìn)出的前導(dǎo)、時(shí)鐘節(jié)拍、任務(wù)調(diào) 度、事件處理等多部分。能夠維 持系統(tǒng)基本工作的部分都在這 里。 任務(wù)處理部分(OSTask.c) 任務(wù)處理部分中的內(nèi)容都是與 任務(wù)的操作密切相關(guān)的。包括任 務(wù)的建立、刪除、掛起、恢復(fù)等等。因?yàn)橼郈/OS-II是以任務(wù)為基本單位調(diào)度的, 所以這部分內(nèi) 容也相當(dāng)重要。
4、時(shí)鐘部分(OSTime.c)卩C/OS-II中的最小時(shí)鐘單位是timetick (時(shí)鐘節(jié)拍) 任務(wù)延時(shí)等操作是在這里完成的。 任務(wù)同步和通信部分 為事件處理部分,包括信號(hào)量、郵箱、郵箱隊(duì)列、事 件標(biāo)志等部分;主要用于任務(wù)間的互相聯(lián)系和對(duì)臨界資源的訪問(wèn)。 與CPU勺接口部分 是指卩C/OS-II針對(duì)所使用的CPU勺移植部分。由于 卩C/OS-II是一個(gè)通用性的操作系統(tǒng),所以對(duì)于關(guān)鍵問(wèn)題上的實(shí)現(xiàn),還是需要根據(jù)具體CPU勺具體內(nèi)容和要求作相應(yīng)的移植。這部分內(nèi)容由于牽涉到SP等系統(tǒng) 指針,所以通常用匯編語(yǔ)言編寫(xiě)。主要包括中斷級(jí)任務(wù)切換的底層實(shí)現(xiàn)、任務(wù)級(jí) 任務(wù)切換的底層實(shí) 現(xiàn)、時(shí)鐘節(jié)拍的產(chǎn)生和處理、中斷
5、的相關(guān)處理部分等內(nèi)容。 2對(duì)于MSP430的中斷處理 2.1函數(shù)調(diào)用和中斷調(diào)用的操作 MSP43最常使用的C編譯器應(yīng)該就是IAR Embedd-edWorkBench對(duì)于這一 編譯器來(lái)說(shuō),通過(guò)分析和研究,發(fā)現(xiàn)它有以下規(guī)律。 函數(shù)調(diào)用 如果是函數(shù)級(jí)調(diào)用,編譯器會(huì)在函數(shù)調(diào)用時(shí)先把當(dāng)前函數(shù)PC壓棧,然后調(diào) 用函數(shù),PC值改變。 如果被調(diào)用的函數(shù)帶有參數(shù),那么,編譯器按照以下的規(guī)則進(jìn)行。 最左邊的兩個(gè)參數(shù)如果不是struct (結(jié)構(gòu)體)或者union (聯(lián)合體),將被 賦值到寄存器,否則將被壓棧。函數(shù)剩下的參數(shù)都將被壓棧。根據(jù)最左邊的那 兩個(gè)參數(shù)的類型,分別賦值給 R12 (對(duì)于32位類型賦值給R12
6、:R13)和R14(對(duì) 于32位類型賦值給R14:R15)。 (2) 中斷調(diào)用 如果是在中斷中調(diào)用中斷服務(wù)子程序的話,編譯器將把當(dāng)前執(zhí)行語(yǔ)句的PC 壓棧,同時(shí)再把SR壓棧。接著,根據(jù)中斷服務(wù)子程序的復(fù)雜程度,選擇 把R12R15 中的寄存器壓棧。然后,執(zhí)行中斷服務(wù)子程序。中斷處理結(jié)束后再把Rx寄存器 出棧,SR出棧,PC出棧。把系統(tǒng)恢復(fù)到中斷前的狀態(tài),使程序 接著被中斷的部 分繼續(xù)運(yùn)行。 圉3中斷發(fā)生盯的任務(wù)棧壓棧操作 2.2任務(wù)級(jí)和中斷級(jí)的任務(wù)切換步驟和原理 (1)任務(wù)級(jí)的任務(wù)切換原理 卩C/OS-II是一個(gè)多任務(wù)的操作系統(tǒng),在沒(méi)有用戶自己定義的中斷情況下, 任務(wù)間的切換步驟是這樣的:任務(wù)間
7、的切換一般會(huì)調(diào)用OSSchedO函數(shù)。函數(shù) 的結(jié)構(gòu)如下: void OSSched(void) 關(guān)中斷 如果(不是中斷嵌套并且系統(tǒng)可以被調(diào)度) 確定優(yōu)先級(jí)最高的任務(wù) 如果(最高級(jí)的任務(wù)不是當(dāng)前的任務(wù)) 調(diào)用 OSCtxSw(); 開(kāi)中斷 我們把這個(gè)函數(shù)稱作任務(wù)調(diào)度的前導(dǎo)函數(shù)。它先判斷要進(jìn)行任務(wù)切換的條 件,如果條件允許進(jìn)行任務(wù)調(diào)度,則調(diào)用OSCtxSwO。這個(gè)函數(shù)是真正實(shí)現(xiàn)任 務(wù)調(diào)度的函數(shù)。由于期間要對(duì)堆棧進(jìn)行操作,所以O(shè)SCtxSwO般用匯編語(yǔ)言寫(xiě) 成。它將正在運(yùn)行的任務(wù)的 CPU的SR寄存器推入堆棧,然后 把R4R15壓棧。 接著把當(dāng)前的SP保存在TCB-OSTCBStkPt中,然后把最高
8、優(yōu)先級(jí)的 TCB-OSTCBStkPt的值賦值給SP這時(shí)候,SP就已經(jīng)指到最高優(yōu)先級(jí)任務(wù)的 任務(wù)堆棧了。然后進(jìn)行出棧工作,把R15R4出棧。接著使用RETI返回,這樣就 把SR和PC出棧了。簡(jiǎn)單地說(shuō),卩C/OS-II切換到最高優(yōu)先級(jí)的任務(wù),只是恢 復(fù)最高優(yōu)先級(jí)任務(wù)所有的寄存器并運(yùn)行中斷返回指令(RETI),實(shí)際上,所作的 只是人為地 模仿了一次中斷。 (2) 中斷級(jí)的任務(wù)切換原理 卩C/OS-II的中斷服務(wù)子程序和一般前后臺(tái)的操作有少許不同,往往需要這 樣操作: 保存全部CPU寄存器 調(diào)用 OSIntEnter() 或 OSIntNesting+ 開(kāi)放中斷 執(zhí)行用戶代碼 關(guān)閉中斷 調(diào)用 OSI
9、ntExit(); 恢復(fù)所有CPU寄存器 RETI OSIntEnter() 就是將全局變量 OSIntNesting 加 1。 OSIntNesting 是中斷嵌 套層數(shù)的變量。卩C/OS-II通過(guò)它確保在中斷嵌套的時(shí)候, 不進(jìn)行任務(wù)調(diào)度。執(zhí) 行完用戶的代碼后,卩C/OS-II調(diào)用OSIntExit(),個(gè)與OSSched艮像的函 數(shù)。 在這個(gè)函數(shù)中,系統(tǒng)首先把 OSIntNesting 減 1,然后判斷是否中斷嵌套。 如果不是的話,并且當(dāng)前任務(wù)不是最高優(yōu)先級(jí)的任務(wù), 那么找到優(yōu)先級(jí)最高的 任 務(wù),執(zhí)行 OSIntCtxSw() 這一出中斷任務(wù)切換函數(shù)。因?yàn)?,在這之前已經(jīng)做好了 壓棧工作;在
10、這個(gè)函數(shù)中,要進(jìn)行R15R4的出棧工作。而且,由于在之前調(diào)用 函數(shù)的時(shí)候,可能已經(jīng)有一些寄存器被壓入了堆棧。 所以要進(jìn)行堆棧指針的調(diào)整, 使得能夠從正確的位置出棧。 系統(tǒng)堆棧 屮斷處埋 過(guò)枚中町 能壓棧的 些指針 和奇存器 SP調(diào)整到 系統(tǒng)堆棧處 壓棧后SP 的位置 低地址 圖4 SP指針調(diào)整 3使用卩C/OS-II存在的問(wèn)題和解決方法 由于卩C/OS-II在應(yīng)用的時(shí)候會(huì)占用單片機(jī)上的一些資源,如系統(tǒng)時(shí)鐘、 RAM Flash或者ROM從而減少了用戶程序?qū)Y源的利 用。對(duì)于MSP43來(lái)說(shuō), RAM勺占用是特別突出的問(wèn)題。對(duì)于 8、16位的單片機(jī)來(lái)說(shuō),片內(nèi)的RAM容量都 很小,MSP43也是如此
11、(最大的片內(nèi) RAM也只有2KB例如MSP430F14)。如 果使用擴(kuò)展內(nèi)存,會(huì)大大增加設(shè)計(jì)難度。 通過(guò)對(duì)卩C/OS-II的分析可以得知,卩C/OS-II占用的RAM主要是用在每個(gè) 任務(wù)的TCB每個(gè)任務(wù)的堆棧等方面。通過(guò)進(jìn)一步分析,發(fā)現(xiàn)任務(wù)堆棧大的原 因是因?yàn)镸SP430勺硬件設(shè)計(jì)中沒(méi)有把中斷堆棧和任務(wù)堆棧分開(kāi)。這樣就造成了 在應(yīng)用卩C/OS-II的時(shí)候,考慮每個(gè)任務(wù)的任務(wù) 堆棧大小時(shí),不單單需要計(jì)算 任務(wù)中局部變量和函數(shù)嵌套層數(shù), 還需要考慮中斷的最大嵌套層數(shù)。因?yàn)?,?duì)于 卩C/OS-II原始的中斷處理的設(shè)計(jì)、中斷處理過(guò) 程中的中斷嵌套中所需要壓棧 的寄存器大小和局部變量的內(nèi)存大小,都需要算
12、在每個(gè)任務(wù)的任務(wù)堆棧中, 則對(duì) 于每一個(gè)任務(wù)都需要預(yù)留這一部分內(nèi)存,所以大量的RAM被浪費(fèi)。從這里可以 看出,解決這一問(wèn)題的直接方法就是把中斷堆棧和每個(gè)任務(wù)自己的堆棧分開(kāi)。這 樣,在計(jì)算每個(gè)任務(wù)堆棧的時(shí)候,就不需要把中斷處理中(包括中斷嵌套過(guò)程 中)的內(nèi)存的占用計(jì)算到每個(gè)任務(wù)的任務(wù)堆棧中,只需要計(jì)算每個(gè)任務(wù)本身需要 的內(nèi)存大小,從而提高了 RAM勺利用率,可以緩解內(nèi)存緊張的 問(wèn)題。 在這種設(shè)計(jì)方案中,中斷堆棧區(qū)也就是利用原有的 MSP43沖的系統(tǒng)堆棧區(qū)。 在前后臺(tái)的設(shè)計(jì)形式中,中斷中的壓棧和出棧的操作都是在系統(tǒng)的堆棧區(qū)完成 的?;谮郈/OS-II的任務(wù)切換的原理,我們對(duì)于任務(wù)堆棧的功能和系統(tǒng)
13、堆棧的 功能做了以下劃分:任務(wù)在運(yùn)行過(guò)程中產(chǎn)生中斷和任務(wù)切換的時(shí)候,PC和SR 以及寄存器Rx都保存在各個(gè)任務(wù)自己的任務(wù)堆棧中;而中斷嵌套產(chǎn)生的壓棧和 出棧的操作都是放在系統(tǒng)堆棧中進(jìn)行的。這種劃分方式是基于盡量將中斷任務(wù) 與普通任務(wù)分開(kāi)的思想設(shè)計(jì)的。 從前面對(duì)于IAR EW的默認(rèn)操作分析來(lái)看,堆棧的結(jié)構(gòu)可以有兩種。一種是 把卩C/OS-II的任務(wù)堆棧設(shè)計(jì)成圖1所示的形式。這種方法是把編譯器默認(rèn)的壓 棧操作放在前面, 然后再把剩下的寄存器進(jìn)棧。但是,由于編譯器在處理復(fù)雜 程度不同的中斷服務(wù)程序的時(shí)候, 壓入棧的寄存器的數(shù)量不定, 所以會(huì)對(duì)以后其 余寄存器的壓棧和出棧操 作增加復(fù)雜度。這里,我們采
14、用了圖 2 所示的方式生 成堆棧。在這種堆棧中,PC和SR壓棧后,通過(guò)調(diào)整SP指針,使得R4R15寄存 器覆蓋編譯器默認(rèn)壓棧 的寄存器。這樣,處理的難度會(huì)小一點(diǎn)。 對(duì)于這樣的設(shè)計(jì)方式,CPU必須能夠: 有相應(yīng)的CPU寄存器能夠模仿SP的一些功能,能使用相應(yīng)的指令來(lái)完成類似 SP的一些操作; 作為SP使用的寄存器在編譯過(guò)程中最好不被編譯器默認(rèn)使用。 在IAR的編譯 器中,有一個(gè)選項(xiàng)可以避免在編譯過(guò)程中使用到R4、R5。 這兩點(diǎn)MSP43I都可以做到。 下面對(duì)一個(gè)正在運(yùn)行的優(yōu)先級(jí)為 6的任務(wù)中斷后,會(huì)發(fā)生的幾種情況進(jìn)行 分析。 1 )在中斷的處理過(guò)程中沒(méi)有更高優(yōu)先級(jí)的中斷產(chǎn)生, 即不會(huì)產(chǎn)生中斷嵌套
15、。 圖 3 所示為中斷發(fā)生后對(duì)于任務(wù)優(yōu)先級(jí)為 6的任務(wù)堆棧所進(jìn)行的操作。 中斷 發(fā)生后,PC和SR被系統(tǒng)壓棧,對(duì)于IAR C編譯器來(lái)說(shuō),會(huì)按照復(fù)雜度不同的 中斷服務(wù)程序的要求, 默認(rèn)地進(jìn)行一些寄存器的壓棧操作。 因?yàn)槲覀円蟮亩?棧格式是如圖2所示的,我們要把SP調(diào)整到SR后面,然后進(jìn)行R4R15勺壓 棧操作,形成我們所要求的堆棧格式。 進(jìn)行任務(wù)堆棧的壓棧工作以后,就可以調(diào)整 SP的指針到系統(tǒng)堆棧了,如圖 4所示。壓棧后的SP指向最后一個(gè)壓棧內(nèi)容。我們把SP的值賦值給 優(yōu)先級(jí)6 任務(wù)的TCB-OSTCBStkP,以便進(jìn)行任務(wù)調(diào)度的時(shí)候出棧使用。接著,就把 SP調(diào)整到系統(tǒng)堆棧處。在中斷處理過(guò)程中
16、,可能會(huì)出現(xiàn)壓棧的操作,那么這 種情況下SP的指針會(huì)隨之移動(dòng)。由于現(xiàn)在是中斷堆棧中,所以不會(huì)破壞任務(wù)堆 棧的格式。 由于沒(méi)有中斷嵌套, 在中斷處理中沒(méi)有別的中斷發(fā)生, 那么返回的步驟和上 述的進(jìn)棧操作正好相反。在中斷處理完了以后, SP會(huì)自動(dòng)回到圖4中 的SP 位置。接著,系統(tǒng)會(huì)查詢到優(yōu)先級(jí)最高的任務(wù),然后把 SP的指針移到優(yōu)先級(jí)最 高的任務(wù)的任務(wù)堆棧,進(jìn)行 R15R4的出棧工作,最后用RETI中斷返 回指令返 回到新的任務(wù)。 因?yàn)槲覀儼阉械娜蝿?wù)堆棧都規(guī)定成相同的格式, 所以它們之間 不會(huì)產(chǎn)生問(wèn)題。這里需要注意的是,因?yàn)橄到y(tǒng)在 C編譯器的中斷處理中會(huì)對(duì) 中 斷進(jìn)入時(shí)默認(rèn)壓棧的寄存器出棧, 所
17、以在設(shè)計(jì)出棧的程序時(shí), 要先把這些內(nèi)容壓 棧,這樣才能正確出棧。 2)在中斷的處理過(guò)程中,有別的中斷產(chǎn)生,產(chǎn)生中斷嵌套。 如圖5所示,由于在處理中斷的時(shí)候,SP已經(jīng)被移到系統(tǒng)堆棧去了,只有 當(dāng)中斷退出的時(shí)候才可能把 SP移到別的任務(wù)的任務(wù)堆棧中。所以在中斷 的時(shí)候 進(jìn)行中斷嵌套, 那么對(duì)于中斷的處理和第一次是一樣的, 所不同的是, 這次保存 在堆棧中的不是任務(wù)運(yùn)行中的寄存器, 而是中斷處理中的寄存器, 而且是保存 在 系統(tǒng)堆棧中而不是任務(wù)堆棧中。 從這里就可以看出優(yōu)化內(nèi)存的效果。 所有的中斷 嵌套中的寄存器壓棧都?jí)涸谙到y(tǒng)堆棧中, 這樣對(duì)于任務(wù)堆棧內(nèi)存大小的要求大大 降 低。 局地址 中斯鍛住
18、前刖的指計(jì) | 中胡處理過(guò) 程中可能樂(lè) 棧的”些指 汁和寄存器 中斷嵌奩 枕 PC SRLK Hi IAR C編 譯髀默認(rèn)的 些生棧操 F5 SP的位 PC SR RI2 RU R14 RJ5 低地址 ,PC SF調(diào)整到這星 低地址 中斷處輕過(guò) 稈中町能01 棧的些脂 竹和務(wù)右器 進(jìn)行用棧 操作壓入 F44-R15. SP JSHR15 處 圖5中斷嵌套時(shí)的指針憤況 因?yàn)?卩C/OS-II在進(jìn)入中斷中,會(huì)把全局變量 OSIntNesting+ ;在退出中 斷的時(shí)候,又會(huì)把OSIntNesting-。在退出中斷進(jìn)行任務(wù) 切換之前,卩C/OS-II 會(huì)先判斷OSIntNesting是否為0,是0才
19、會(huì)進(jìn)行任務(wù)調(diào)度。當(dāng)?shù)诙袛噙\(yùn)行結(jié) 束以后,退出中斷嵌套的時(shí) 候,OSIntNesting不為0,也就不會(huì)進(jìn)行任務(wù)調(diào)度。 因此,仍舊在系統(tǒng)堆棧出棧,那么系統(tǒng)會(huì)繼續(xù)前面沒(méi)有完成的中斷服務(wù)程序。 接著退出中斷的順序和非中斷嵌套的順序是一樣的。 在中斷處理完以后,SP 會(huì)自動(dòng)回到圖4中的SP位置。接著,系統(tǒng)會(huì)查詢到優(yōu)先級(jí)最高的任 務(wù),然后 把SP的指針移到優(yōu)先級(jí)最高的任務(wù)的任務(wù)堆棧。進(jìn)行R15R4的出棧工作,最后 用RETI中斷返回指令返回到新的任務(wù)。 中斷的情況基本上就是上述兩種。對(duì)于有些文獻(xiàn)中提到的在中斷中會(huì)調(diào)度到 更高優(yōu)先級(jí)的任務(wù)的情況,筆者覺(jué)得是不應(yīng)該發(fā)生的。因?yàn)閺纳厦娴姆治隹梢?看出,默認(rèn)的 (卩 C/OS-II 的設(shè)計(jì)思路) 中斷處理會(huì) 同時(shí)對(duì)全局 變量 OSI ntNest in g進(jìn)行增減處 理,以給出是 否需要任務(wù) 調(diào)度的條 件。那么即使 在中斷服務(wù) 程序中把更 高優(yōu)先級(jí)的 任務(wù)就緒,也
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代工合同范本
- 國(guó)際郵政合同范本
- 小麥-玉米輪作系統(tǒng)溫室氣體排放及節(jié)水減排模式研究
- 溫光資源約束區(qū)亞麻薺的主要農(nóng)藝性狀與種質(zhì)資源評(píng)價(jià)
- 生態(tài)農(nóng)業(yè)的崛起與環(huán)境保護(hù)的協(xié)同發(fā)展
- 房產(chǎn)過(guò)戶中介合同范本
- 基于注意力機(jī)制的視覺(jué)描述研究
- 科技創(chuàng)新助力中小企業(yè)提升品牌形象
- 荊楚文旅產(chǎn)業(yè)的品牌運(yùn)營(yíng)策略研究
- 全介質(zhì)拓?fù)涔裙庾泳w的偏振及其應(yīng)用研究
- 一年級(jí)下冊(cè)勞動(dòng)教案
- 付款申請(qǐng)英文模板
- 大同大學(xué)綜測(cè)細(xì)則
- 生活會(huì)前談心談話提綱
- 比較思想政治教育(第二版)第十二章課件
- 普通外科常見(jiàn)疾病臨床路徑
- 人教版九年級(jí)下冊(cè)初中英語(yǔ)全冊(cè)作業(yè)設(shè)計(jì)一課一練(課時(shí)練)
- 2021新版GJB9001C-2017體系文件內(nèi)審檢查表
- 風(fēng)篩式清選機(jī)的使用與維護(hù)
- 《計(jì)算流體力學(xué)CFD》
- 馬克思主義宗教觀課件
評(píng)論
0/150
提交評(píng)論