




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
一嵌入式實時操作系統1、嵌入式實時操作系統的概念嵌入式系統是“用于控制、監(jiān)視或者輔助操作機器和設備的裝置”。實時操作系統(RTOS)是指當外界事件或數據產生時,能夠接受并以足夠快的速度予以處理,其處理的結果又能在規(guī)定的時間之內來控制生產過程或對處理系統做出快速響應,調度一切可利用的資源完成實時任務,并控制所有實時任務協調一致運行的操作系統。提供及時響應和高可靠性是其主要特點。常用的系統有ucosii,rtthread,MsgOS。實時操作系統是保證在一定時間限制內完成特定功能的操作系統。實時操作系統有硬實時和軟實時之分,硬實時要求在規(guī)定的時間內必須完成操作,這是在操作系統設計時保證的;軟實時則只要按照任務的優(yōu)先級,盡可能快地完成操作即可。我們通常使用的操作系統在經過一定改變之后就可以變成實時操作系統。2、實時操作系統在嵌入式系統中的作用和地位首先,嵌入式實時操作系統提高了系統的可靠性。在控制系統中,出于安全方面的考慮,要求系統起碼不能崩潰,而且還要有自愈能力。不僅要求在硬件設計方面提高系統的可靠性和抗干擾性,而且也應在軟件設計方面提高系統的抗干擾性,盡可能地減少安全漏洞和不可靠的隱患。長期以來的前后臺系統軟件設計在遇到強干擾時,使得運行的程序產生異常、出錯、跑飛,甚至死循環(huán),造成了系統的崩潰。而實時操作系統管理的系統,這種干擾可能只是引起若干進程中的一個被破壞,可以通過系統運行的系統監(jiān)控進程對其進行修復。通常情況下,這個系統監(jiān)視進程用來監(jiān)視各進程運行狀況,遇到異常情況時采取一些利于系統穩(wěn)定可靠的措施,如把有問題的任務清除掉。其次,提高了開發(fā)效率,縮短了開發(fā)周期。在嵌入式實時操作系統環(huán)境下,開發(fā)一個復雜的應用程序,通??梢园凑哲浖こ讨械慕怦钤瓌t將整個程序分解為多個任務模塊。每個任務模塊的調試、修改幾乎不影響其他模塊。商業(yè)軟件一般都提供了良好的多任務調試環(huán)境。再次,嵌入式實時操作系統充分發(fā)揮了32位cpu的多任務潛力。32位cpu比8、16位cpu快,另外它本來是為運行多用戶、多任務操作系統而設計的,特別適于運行多任務實時系統。32位cpu采用利于提高系統可靠性和穩(wěn)定性的設計,使其更容易做到不崩潰。例如,cpu運行狀態(tài)分為系統態(tài)和用戶態(tài)。將系統堆棧和用戶堆棧分開,以及實時地給出cpu的運行狀態(tài)等,允許用戶在系統設計中從硬件和軟件兩方面對實時內核的運行實施保護。如果還是采用以前的前后臺方式,則無法發(fā)揮32位cpu的優(yōu)勢。從某種意義上說,沒有操作系統的計算機(裸機)是沒有用的。在嵌入式應用中,只有把cpu嵌入到系統中,同時又把操作系統嵌入進去,才是真正的計算機嵌入式應用。3、實時操作系統的應用場合(1)過程控制,例如無線打印機,打印過程對實時性要求較高。例如工業(yè)機器人的操作控制。還有航天方面的火星車,月球車的控制。(2)數據采集,例如無線攝像頭,必須實時對畫面進行壓縮和發(fā)送。例如物聯網設備的信息采集和上傳。(3)通信,例如藍牙耳機,需要實時接收數據并且解碼。例如網絡中的路由設備,對實時性要求比較高。4、嵌入式實時操作系統的發(fā)展前景RTOS可劃分為3個不同的領域:1.系統級:指RTOS運行在1個小型的計算機系統中完成實時的控制作用。這個領域將主要是微軟與Sun競爭之地,傳統上Unix在這里占有絕對優(yōu)勢。Sun通過收購,讓他的Solaris與Chrousos(原歐洲的1種RTOS)結合,微軟力推NT的嵌入式版本"EmbeddedNT"。此外,嵌入式Linux將依托源程序碼開放和軟件資源豐富的優(yōu)勢,進入系統級RTOS的市場。2.板級:傳統的RTOS的主要市場。如Vxwork,PSOS,QNX,Lynx和VRTX的應用將主要集中在航空航天、電話電訊等設備上。3.SOC級(即片上系統):新一代RTOS的領域:主要應用在消費電子、互聯網絡和手持設備等產品上。代表的產品有Symbian的Epoc、ATI的Nucleus,Expresslogic的Threadx。老牌的RTOS廠家的產品VRTX和Vxwork也很注意這個市場。從某種程度講,不會出現1個標準的RTOS(像微軟的Windows在桌面系統中的地位一樣),因為嵌入式應用本身就極具多樣性。在某個時間段以及某種行業(yè),會出現1種絕對領導地位的RTOS,比如今天在寬帶的數據通信設備中的Vxwork和在亞洲手持設備市場上的WinCE就是一例子。但是,這種壟斷地位也并不是牢不可破的,因為在某種程度上用戶和合作伙伴更愿意去培養(yǎng)1個新的競爭對手。比如,Intel投資的Montivista和Motorola投資的Lineo,這兩家嵌入式Linux系統,就是說明半導體廠商更愿意看到1個經濟適用的、開放的RTOS環(huán)境。二UCOS系統1、UCOS系統介紹μC/OS-II由Micrium公司提供,是一個可移植、可固化的、可裁剪的、占先式多任務實時內核,它適用于多種微處理器,微控制器和數字處理芯片(已經移植到超過100種以上的微處理器應用中)。同時,該系統源代碼開放、整潔、一致,注釋詳盡,適合系統開發(fā)。μC/OS-II已經通過聯邦航空局(FAA)商用航行器認證,符合航空無線電技術委員會(RTCA)DO-178B標準?,F在最新版的是μC/OS-III。μC/OS-II的前身是μC/OS,最早出自于1992年美國嵌入式系統專家JeanJ.Labrosse在《嵌入式系統編程》雜志的5月和6月刊上刊登的文章連載,并把μC/OS的源碼發(fā)布在該雜志的BBS上。μC/OS和μC/OS-II是專門為計算機的嵌入式應用設計的,絕大部分代碼是用C語言編寫的。CPU硬件相關部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU上。用戶只要有標準的ANSI的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌入到開發(fā)的產品中。μC/OS-II具有執(zhí)行效率高、占用空間小、實時性能優(yōu)良和可擴展性強等特點,最小內核可編譯至2KB。μC/OS-II已經移植到了幾乎所有知名的CPU上。嚴格地說uC/OS-II只是一個實時操作系統內核,它僅僅包含了任務調度,任務管理,時間管理,內存管理和任務間的通信和同步等基本功能。沒有提供輸入輸出管理,文件系統,網絡等額外的服務。但由于uC/OS-II良好的可擴展性和源碼開放,這些非必須的功能完全可以由用戶自己根據需要分別實現。μC/OS-II被廣泛應用于微處理器、微控制器和數字信號處理器。2、UCOS系統的應用μC/OS-II可以提供如下服務:信號量互斥信號量事件標識消息郵箱消息隊列任務管理固定大小內存塊管理時間管理另外,在μC/OS-II內核之上,有如下獨立模塊可供用戶選擇:μC/FS文件系統模塊μC/GUI圖形軟件模塊μC/TCP-IP協議棧模塊μC/USB協議棧模塊3、系統的組成μC/OS-II可以大致分成核心、任務處理、時間處理、任務同步與通信,CPU的移植等5個部分。(1)核心部分(OSCore.c)是操作系統的處理核心,包括操作系統初始化、操作系統運行、中斷進出的前導、時鐘節(jié)拍、任務調度、事件處理等多部分。能夠維持系統基本工作的部分都在這里。(2)任務處理部分(OSTask.c)任務處理部分中的內容都是與任務的操作密切相關的。包括任務的建立、刪除、掛起、恢復等等。因為μC/OS-II是以任務為基本單位調度的,所以這部分內容也相當重要。(3)時鐘部分(OSTime.c)μC/OS-II中的最小時鐘單位是timetick(時鐘節(jié)拍)。任務延時等操作是在這里完成的。(4)任務同步和通信部分為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;主要用于任務間的互相聯系和對臨界資源的訪問。(5)與CPU的接口部分是指μC/OS-II針對所使用的CPU的移植部分。由于μC/OS-II是一個通用性的操作系統,所以對于關鍵問題上的實現,還是需要根據具體CPU的具體內容和要求作相應的移植。這部分內容由于牽涉到SP等系統指針,所以通常用匯編語言編寫。主要包括中斷級任務切換的底層實現、任務級任務切換的底層實現、時鐘節(jié)拍的產生和處理、中斷的相關處理部分等內容。4、原理及特點(1)原理UC/OS-II的工作核心原理是:近似地讓最高優(yōu)先級的就緒任務處于運行狀態(tài)。首先,初始化MCU,再進行操作系統初始化,主要完成任務控制塊TCB初始化,TCB優(yōu)先級表初始化,TcB鏈表初始化,事件控制塊E(CB)鏈表初始化,空任務的創(chuàng)建等等;然后就可以開始創(chuàng)建新任務,并可在新創(chuàng)建的任務中再創(chuàng)建其他的新任務;最后調用OSSTART()函數啟動多任務調度。在多任務調度開始后,啟動時鐘節(jié)拍源開始計時,此節(jié)拍源給系統提供周期性的時鐘中斷信號,實現延時和超時確認。操作系統在下面的情況下進行任務調度:中斷和調用API函數(用戶主動調用)。一種是當時鐘中斷來臨時,系統把當前正在執(zhí)行的任務掛起,保護現場,進行中斷處理,判斷有無任務延時到期,若有則使該任務進入就緒態(tài),并把所有進入就緒態(tài)的任務的優(yōu)先級進行比較,通過任務切換去執(zhí)行最高優(yōu)先級的就緒任務,若沒有別的任務進入就緒態(tài),則恢復現場繼續(xù)執(zhí)行原任務。另一種調度方式是任務級的調度即調用API函數(由用戶主動調用),是通過發(fā)軟中斷命令或依靠處理器在任務執(zhí)行中調度,如任務要等待信號量或一個正在執(zhí)行的任務被懸掛起來時,就需要在此任務中調度,找出目前處于就緒態(tài)的優(yōu)先級最高的任務去執(zhí)行。當沒有任何任務進入就緒態(tài)時,就去執(zhí)行空任務。(2)特點1.UC/OS一H提供了對64個任務的管理,除了系統內核本身所保留了8個任務外,用戶的應用程序最多可以有56個任務。由于UC/05-II是一個基于優(yōu)先級的(不支持時間片輪轉調度)實時操作系統,因此每個任務的優(yōu)先級必須不相同。系統中的每個任務都處于以下5種狀態(tài)之一的狀態(tài)中,這5種狀態(tài)是休眠態(tài)、就緒態(tài)、運行態(tài)、等待態(tài)(等待某一事件發(fā)生)和被中斷態(tài)。2.UC/05-II是一個占先式(peremPtive)的內核,即最高優(yōu)先級的任務一旦就緒,總能得到處理器的控制權。當一個運行著的任務使一個比它優(yōu)先級高的任務進入了就緒態(tài),則當前任務的處理器控制權就被剝奪了,或者說被掛起,那個高優(yōu)先級的任務立刻得到處理器的控制權。如果是中斷服務程序(ISR)使一個高優(yōu)先級的任務進入就緒態(tài),中斷處理完成后,被中斷了的任務將被掛起,優(yōu)先級高的那個任務則開始運行。3.UC/05-II提供了對信號量(Semaphore)、郵箱(MailBox)和消息隊列(MessageQueue)的支持。通過這3種方法可以完成任務與中斷服務程序(ISR)之間的通信、任務與任務之間的通信以及多個任務對共享資源的互斥訪問。UCOS系統的優(yōu)點在于:(1)它的內核是完全免費的,用戶不需支付任何費用,有利于降低系統開發(fā)成本。(2)它的源代碼是公開的,并且仍在不斷的升級,增加新功能。源代碼的開放可以使得用戶根據實際要求對源代碼進行取舍,去掉不必要的變量和不使用的函數,提高系統性能。另外,由于對系統內核有源代碼級的了解,用戶可以添加自己的模塊,與原有系統內核兼容,使得系統具有可擴展性。(3)系統內核實用性強、可靠性高。從最老版本的UCOS,以及后來的UC/S0,到最新版本的UC/05-11,該實時內核己經走過了近10年的歷程。10年來,世界上己有數千人在各個領域使用了該實時內核,如醫(yī)療器械、網絡設備、自動提款機、工業(yè)機器人等等。這些應用的實踐是該內核實用性、無誤性的最好證據。(4)操作系統內核對處理器以及ORM、RAM資源的要求不高,有利于在8位處理器上的移植。三μC/OS-II系統移植1、μC/OS-II移植條件雖然μC/OS-II的大部分源代碼是用C語言寫成的,但是仍需要用匯編語言完成一些與微處理器相關的代碼。例如,μC/OS-II在讀寫微處理器、寄存器時只能通過匯編語言來實現,這是因為μC/OS-II在設計時就已經充分考慮了可移植性。為了要使μC/OS-II可以正常工作,處理器必須要滿足如下要求:(1)微處理器的C編譯器能產生可重入代碼。可重入的代碼指的是一段代碼(如一個函數)可以被多個任務同時調用,而不必擔心會破壞其內部的數據。可重入型函數在任何時候都可以被中斷執(zhí)行,也不會因為在函數中斷的時候被其他的任務重新調用,影響函數中的數據。下面列舉了兩個例子來對可重入型函數和非可重入型函數進行比較。程序1:可重入型函數程序2:非可重入型函數程序1中使用的是局部變量nTemp,C編譯器把局部變量分配在棧中,所以多次調用同一個函數可以保證每次的nTemp互不受影響。而程序2中g_nTemp是全局變量,多次調用函數時必然受到影響。代碼的可重入性是保證完成多任務的基礎,除了在C語言程序中使用局部變量外,還需要C編譯器的支持?;贏RM的SDT.ADS等集成開發(fā)環(huán)境,都可以生成可重入的代碼。(2)打開或者關閉中斷。在μC/OS-II操作系統中,可以通過進入中斷屏蔽的宏定義OS_ENTER_CRITICAL()或者退出中斷屏蔽的宏定義OSEXIT_CRITICAL0來控制系統關閉中斷或者打開中斷,這需要微處理器的支持。在目前的ARM系列的ARM7TDMI、ARM9T等微處理器上,都可以設置相應的寄存器來關閉或者打開系統的所有中斷。(3)微處理器支持中斷,并且能產生定時中斷(通常在10~1000Hz),μC/OS-II是通過微處理器產生定時的中斷來實現多任務之間的調度的。(4)微處理器支持能夠容納一定量數據的硬件堆棧,并具有將堆棧指針和其他CPU寄存器讀寫到堆棧(或者內存)的指令。μC/OS-II進行任務調度時,會把當前任務的CPU內部寄存器的內容存放到此任務的堆棧中,然后從另一個任務的堆棧中恢復原來的工作寄存器,繼續(xù)運行另一個任務。所以,寄存器中內容的入棧和出棧是μC/OS-II多任務調度的基礎。2、μC/OS-lI的移植步驟1.設置頭文件OS__CPU.H中與處理器和編譯器相關的代碼(1)與編譯器相關的數據類型因為不同的微處理器有不同的字長,所以μC/OS-II的移植包括了一系列的類型定義以確保其可移植性。例如,μC/OS-II的代碼不使用C語言的short、int和long等數據類型,這是因為它們是與編譯器密切相關的,不可移植。然而,我們所要求定義的整型數據結構是能夠可移植的。為了方便起見,雖然μC/OS-II不采用浮點數據類型,但我們在實際中還是可以定義為浮點數據類型的。例如,INTI6U數據類型表示16位的無符號整數,μC/OS-II和用戶的應用程序就可以估計出聲明為該數據類型的變量的取值范圍是0~65535。將μC/OS-II移植到32位的微處理器上也就意味著INTI6U實際被聲明為無符號短整型數據結構,而不是無符號整數數據結構。但是,μC/OS-II所處理的仍然是INTI6U。用戶必須將任務堆棧的數據類型定義到μC/OS-II操作系統中,這個過程是通過為OS_STK聲明正確的C語言數據類型來完成的。由于使用的微處理器.上的堆棧成員是16位的,所以將OS__TSK聲明為無符號整型數據類型。值得注意的是,所有的任務堆棧都必須使用OS_TSK聲明數據類型。(2)進入中斷屏蔽的宏定義OS_ENTER_CRITICAL()和退出中斷屏蔽的宏定義OS_EXIT_CRITICAL()。與所有的實時內核一樣,μC/OS-II操作系統在進行任務切換時需要先禁止中斷在訪問代碼的臨界區(qū),并且在訪問完畢后重新允許中斷,這就使得μC/OS-II能夠保護臨界區(qū)代碼免受多任務或中斷服務例程(ISR)的破壞。在ARM微處理器上,如S3C2410微處理器是通過OS_ENTER_CRITICAL(和OS_EXIT_CRITICAL0兩個函數來實現開、關中斷的。(3)棧增長方向標OS_STK_GROWTH.絕大多數的微處理器的堆棧是從高地址向低地址增長的,但是有些微處理器是采用相反的方式工作的。鑒于這種情況,μC/OS-II操作系統被設計成為這兩種情況都可以處理,只要在結構常量OS_STK_GROWTH中指定堆棧的生長方式就可以了。例如,設OS_STK__GROWTH為0表示堆棧從下往上增長,設OS_STK__GROWTH為1表示堆棧從上往下增長。2.用匯編語言在OS_CPU_A.ASM文件中編寫4個與微處理器相關的函數(1)調用優(yōu)先級最高的就緒任務函數OSStartHighRdyO。函數原型如下。OSStartHighRdy()函數在OSStart()多任務啟動之后,負責從最高優(yōu)先級任務的TCB控制塊中獲得該任務的堆棧指針SP,并通過SP依次將CPU現場恢復。這時系統就將控制權交給用戶創(chuàng)建的任務進程,直到該任務被阻塞或者被其他更高優(yōu)先級的任務搶占CPU。該函數僅僅在多任務啟動時被執(zhí)行一次,用來啟動最高優(yōu)先級的任務執(zhí)行。移植該函數的原因是,它涉及將處理器寄存器保存到堆棧的操作。(2)任務級的任務切換函數OSCtxSw()。函數原型如下。OSCtxSw()函數由OS_TASK_SW()宏調用,OS_TASK_SW()由OSSched()函數調用,OSSched()函數負責任務之間的調度。OSCtxSw()函數的工作是先將當前任務的CPU現場保存到該任務的堆棧中,然后獲得最高優(yōu)先級任務的堆棧指針并從該堆棧中恢復此任務的CPU現場使之繼續(xù)執(zhí)行。這樣,該函數就完成了一次任務切換。(3)中斷級的任務切換函數OSIntCtxSw()。函數原型如下。OSIntCtxSw()函數由系統中斷退出OSIntExit()調用。由于中斷可能會使更高優(yōu)先級的任務進入就緒態(tài),為了讓更高優(yōu)先級的任務能立即運行,在中斷服務子程序的最后,OSIntExit()函數會調用OSIntCtxSw()進行任務切換。這樣做的目的主要是能夠盡快地讓高優(yōu)先級的任務得到響應,保證系統的實時性能。OSIntCtxSw()與OSCtxSw()都是用于任務切換的函數,其區(qū)別在于OSIntCtxSw()中無須再保存CPU寄存器。因為在調用OSIntCtxSw()之前已發(fā)生了中斷,OSIntCtxSw()已將默認的CPU寄存器保存到了被中斷的任務的堆棧中。(4)時鐘節(jié)拍中斷服務函數OSTickISR()。時鐘節(jié)拍是特定的周期性中斷,并且是由硬件定時器產生的,這個中斷可看作系統心臟的脈動。時鐘節(jié)拍是中斷使得內核可將任務延時若干個整數時鐘節(jié)拍,以及當任務等待事件發(fā)生時提供等待超時的依據,時鐘節(jié)拍頻率越高,系統的額外開銷就越大,中斷期間的時間間隔取決于不同的應用。OSTickISR()首先將CPU寄存器的值保存在被中斷任務的堆棧中,之后調用系統中斷響應函數OSIntEnter(),隨后OSTickISR()調用OSTimeTick(),檢查所有處于延時等待狀態(tài)的任務,判斷是否有延時結束就緒的任務。OSTickISR()最后調用OSIntExit(),如果在中斷中(或其他嵌套的中斷)有更高優(yōu)先級的任務就緒,并且當前中斷為中斷嵌套的最后一層,那么OSIntExit()將進行任務調度。如果進行了任務調度,OSIntExit()將不再返回調用者,而是用新任務堆棧中的寄存器數值恢復CPU現場,然后用IRET實現任務切換。如果當前中斷不是中斷嵌套的最后一層,或中斷中沒有改變任務的就緒狀態(tài),那么OSIntExit()將返回調用者OSTickISR(),最后OSTickISR()返回被中斷的任務。3.用C語言編寫6個操作系統相關的函數(OS__CPU_C.C)這里主要涉及6個函數:OSTaskStklnit()、OSTaskCreateHook()、OSTaskDelHook()OSTaskSwHook()、OSTaskStatHook()及OSTimeTickHook()。在這些函數中,唯一必須移植的是任務堆棧初始化函數OSTaskStklInit()。這個函數在任務創(chuàng)建時被調用,負責初始化任務的堆棧結構并返回新堆棧的指針stk。在ARM體系結構下,任務堆??臻g由高至低依次保存著PC、LR、R12、R11.R10...R1、R0.CPSR及SPSR.OSTaskStkInit()初始化后的堆棧內容如圖所示,堆棧初始化工作結束后,返回新的堆棧棧頂指針。圖4.1寄存器保存示意圖以下5個Hook函數,又稱為鉤子函數,主要用來擴展μC/OS-II功能,使用前必須被聲明,但并不一定要包含任何代碼。(1)OSTaskCreateHook()函數。當用OSTaskCreate()函數或OSTaskCreateExt()函數建立任務時,就會調用OSTaskCreateHook()函數。μC/OS-II設置完自己的內部結構后,會在調用任務調度程序之前調用OSTaskCreateHook()函數。該函數被調用時中斷是禁止的,因此應盡量減少該函數中的代碼以縮短中斷的響應時問。(2)OSTaskDelHook()函數。當任務被刪除時就會調用OSTaskDellHook()函數,該函數在把任務從μC/OS-II的內部任務鏈表中解開之前被調用。當OSTaskDelHook()函數被調
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2021深圳育才中學(初中)小學三年級數學下期末一模試卷帶答案
- 安裝鐵塔施工方案
- 2024年黑龍江大慶中考滿分作文《詩中誦出赤子心》
- 個人購銷合同范例范例
- 修路個人勞務合同范例
- 合伙餐廳合同范本
- 跨部門合作的工作計劃實例
- 鄉(xiāng)村樹苗銷售合同范例
- 學生自我管理與目標追蹤計劃
- 培養(yǎng)員工潛能與激勵方式計劃
- 四年級下冊綜合實踐活動教案 跟著節(jié)氣去探究 全國通用
- 培智康復課教案模板(共7篇)
- 楊光斌《政治學導論》考研重點整理(自己整理的超實用)
- CCS電氣電子產品型式認可試驗指南
- 員工面試登記表
- rcs-9611c-線路保護測控裝置-技術使用說明
- 《計算機網絡基礎》第1章 計算機網絡概論
- 走遍德國-(課堂PPT)課件
- 《小龍蝦工廠化人工繁育技術規(guī)程》
- SCL-90心理測試試卷
- 法語冠詞總結
評論
0/150
提交評論