




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式操作系統(tǒng)中斷和異常為什么會(huì)有中斷內(nèi)核的一個(gè)主要功能就是處理硬件外設(shè)I/O處理器速度一般比外設(shè)快很多內(nèi)核必須處理其他任務(wù),只有當(dāng)外設(shè)真正完成了準(zhǔn)備好了時(shí)CPU才轉(zhuǎn)過來處理外設(shè)IOIO方式:輪詢、中斷、DMA等輪詢方式效率不高中斷機(jī)制就是滿足上述條件的一種解決辦法10/14/20223嵌入式OS主要內(nèi)容中斷基礎(chǔ)(ARM版)Linux內(nèi)核中軟件級(jí)中斷處理及其數(shù)據(jù)結(jié)構(gòu)Linux的軟中斷、tasklet以及下半部分10/14/20224嵌入式OS中斷和異常中斷(廣義)會(huì)改變處理器執(zhí)行指令的順序,通常與CPU芯片內(nèi)部或外部硬件電路產(chǎn)生的電信號(hào)相對(duì)應(yīng)中斷異步的:由硬件隨機(jī)產(chǎn)生,在程序執(zhí)行的任何時(shí)候可能
2、出現(xiàn)異常同步的:在(特殊的或出錯(cuò)的)指令執(zhí)行時(shí)由CPU控制單元產(chǎn)生我們用“中斷信號(hào)”來通稱這兩種類型的中斷10/14/20225嵌入式OS中斷信號(hào)的作用中斷信號(hào)提供了一種特殊的方式,使得CPU轉(zhuǎn)去運(yùn)行正常程序之外的代碼比如一個(gè)外設(shè)采集到一些數(shù)據(jù),發(fā)出一個(gè)中斷信號(hào),CPU必須立刻響應(yīng)這個(gè)信號(hào),否則數(shù)據(jù)可能丟失當(dāng)一個(gè)中斷信號(hào)到達(dá)時(shí),CPU必須停止它當(dāng)前正在做的事,并且切換到一個(gè)新的活動(dòng)為了做到這這一點(diǎn),在進(jìn)程的內(nèi)核態(tài)堆棧保存程序計(jì)數(shù)器的當(dāng)前值(即eip和cs寄存器)以便處理完中斷的時(shí)候能正確返回到中斷點(diǎn),并把與中斷信號(hào)相關(guān)的一個(gè)地址放入進(jìn)程序計(jì)數(shù)器,從而進(jìn)入中斷的處理10/14/20226嵌入式O
3、S中斷信號(hào)的處理原則快!當(dāng)內(nèi)核正在做一些別的事情的時(shí)候,中斷會(huì)隨時(shí)到來。無辜的正在運(yùn)行的代碼被打斷中斷處理程序在run的時(shí)候可能禁止了同級(jí)中斷中斷處理程序?qū)τ布僮?,一般硬件?duì)時(shí)間也是非常敏感的內(nèi)核的目標(biāo)就是讓中斷盡可能快的處理完,盡其所能把更多的處理向后推遲上半部分(top bottom)和下半部分(half bottom)10/14/20227嵌入式OS允許不同類型中斷的嵌套發(fā)生,這樣能使更多的I/O設(shè)備處于忙狀態(tài)盡管內(nèi)核在處理一個(gè)中斷時(shí)可以接受一個(gè)新的中斷,但在內(nèi)核代碼中還在存在一些臨界區(qū),在臨界區(qū)中,中斷必須被禁止10/14/20228嵌入式OS中斷上下文中斷上下文不同于進(jìn)程上下文中斷
4、或異常處理程序執(zhí)行的代碼不是一個(gè)進(jìn)程它是一個(gè)內(nèi)核控制路徑,代表了中斷發(fā)生時(shí)正在運(yùn)行的進(jìn)程執(zhí)行作為一個(gè)進(jìn)程的內(nèi)核控制路徑,中斷處理程序比一個(gè)進(jìn)程要“輕”(中斷上下文只包含了很有限的幾個(gè)寄存器,建立和終止這個(gè)上下文所需要的時(shí)間很少)10/14/20229嵌入式OS中斷上下文舉例分析A,B,C,D在互相搶占上的關(guān)系 假設(shè): 2個(gè)interrupt context,記為A和B 2個(gè)process,記為C和D 1, 假設(shè)某個(gè)時(shí)刻C占用CPU運(yùn)行,此時(shí)A中斷發(fā)生,C被A搶占,A得以在CPU上執(zhí)行。 由于Linux不為中斷處理程序設(shè)置process context,A只能使用 C的kernel stack作
5、為自己的運(yùn)行棧C進(jìn)程D進(jìn)程A中斷B中斷A中斷發(fā)生current10/14/202210嵌入式OS2 ,無論如何,Linux的interrupt context A絕對(duì)不會(huì)被某個(gè)進(jìn)程C或者D搶占!這是由于所有已經(jīng)啟動(dòng)的interrupt contexts,不管是interrupt contexts之間切換,還是在某個(gè)interrupt context中執(zhí)行代碼的過程,決不可能插入scheduler調(diào)度例程的調(diào)用。除非interrupt context主動(dòng)或者被動(dòng)阻塞進(jìn)入睡眠,喚起scheduler,但這是必須避免的,危險(xiǎn)性見第3點(diǎn)說明。 C進(jìn)程D進(jìn)程A中斷B中斷A中斷發(fā)生current10/14
6、/202211嵌入式OS3 ,關(guān)于第2點(diǎn)的解釋:首先,interrupt context沒有process context,A中斷是“借”了C的進(jìn)程上下文運(yùn)行的,若允許A“阻塞”或“睡眠”,則C將被迫阻塞或睡眠,僅當(dāng)A被“喚醒”C才被喚醒;而“喚醒”后,A將按照C在就緒隊(duì)列中的順序被調(diào)度。這既損害了A的利益也污染了C的kernel stack。其次,如果interrupt context A由于阻塞或是其他原因睡眠,外界對(duì)系統(tǒng)的響應(yīng)能力將變得不可忍受10/14/202212嵌入式OS4 ,那么interrupt context A和B的關(guān)系又如何呢?由于可能在interrupt context
7、的某個(gè)步驟打開了CPU的IF flag標(biāo)志,這使得在A過程中,B的irq line已經(jīng)觸發(fā)了PIC,進(jìn)而觸發(fā)了CPU IRQ pin,使得CPU執(zhí)行中斷B的interrupt context,這是中斷上下文的嵌套過程。 5,通常Linux不對(duì)不同的interrupt contexts設(shè)置優(yōu)先級(jí),這種任意的嵌套是允許的當(dāng)然可能某個(gè)實(shí)時(shí)Linux的patch會(huì)不允許低優(yōu)先級(jí)的interrupt context搶占高優(yōu)先級(jí)的interrupt context C進(jìn)程D進(jìn)程A中斷B中斷A中斷發(fā)生currentB中斷發(fā)生開中斷10/14/202213嵌入式OS中斷和異常的分類(Intel文檔)中斷分為:
8、可屏蔽中斷(Maskable interrupt)I/O設(shè)備發(fā)出的所有中斷請(qǐng)求(IRQ)都可以產(chǎn)生可屏蔽中斷??善帘沃袛嗫梢蕴幱趦煞N狀態(tài):屏蔽的(masked)和非屏蔽的(unmasked)非屏蔽中斷(Nonmaskable interrupt)只有幾個(gè)特定的危急事件才引起非屏蔽中斷。如硬件故障或是掉電10/14/202214嵌入式OS異常分為:處理器探測(cè)異常由CPU執(zhí)行指令時(shí)探測(cè)到一個(gè)反常條件時(shí)產(chǎn)生,如溢出、除0錯(cuò)等編程異常由編程者發(fā)出的特定請(qǐng)求產(chǎn)生,通常由int類指令觸發(fā)通常叫做“軟中斷”例如系統(tǒng)調(diào)用10/14/202215嵌入式OSARM的異常(中斷)機(jī)制在ARM中,中斷異常系統(tǒng)調(diào)用統(tǒng)稱
9、為異常ARM的異常有7種,下面是向量表10/14/202216嵌入式OSARM的寄存器和模式10/14/202217嵌入式OSARM異常的優(yōu)先級(jí)10/14/202218嵌入式OSARM的異常(中斷)機(jī)制發(fā)生異常時(shí)異常返回:R14_ PCSPSR_ CPSR10/14/202219嵌入式OS開關(guān)中斷include/asm-arm/assembler.hInterrupts are disabled when the I bit in the CPSR is set. If the I bit is clear, ARM checks for an IRQ at instruction bound
10、aries.10/14/202220嵌入式OS主要內(nèi)容中斷基礎(chǔ)(ARM版)Linux內(nèi)核中軟件級(jí)中斷處理及其數(shù)據(jù)結(jié)構(gòu)Linux的軟中斷、tasklet以及下半部分10/14/202221嵌入式OS中斷和異常處理程序的嵌套執(zhí)行當(dāng)內(nèi)核處理一個(gè)中斷或異常時(shí),就開始了一個(gè)新的內(nèi)核控制路徑當(dāng)CPU正在執(zhí)行一個(gè)與中斷相關(guān)的內(nèi)核控制路徑時(shí),linux不允許進(jìn)程切換。不過,一個(gè)中斷處理程序可以被另外一個(gè)中斷處理程序中斷,這就是中斷的嵌套執(zhí)行10/14/202222嵌入式OS搶占原則普通進(jìn)程可以被中斷或異常處理程序打斷異常處理程序可以被中斷程序打斷中斷程序只可能被其他的中斷程序打斷Linux允許中斷嵌套的原因提
11、高可編程中斷控制器和設(shè)備控制器的吞吐量實(shí)現(xiàn)了一種沒有優(yōu)先級(jí)的中斷模型10/14/202223嵌入式OS初始化中斷向量表內(nèi)核啟動(dòng)中斷前,必須初始化中斷向量表arch/arm/kernel/entry-armv.S,每個(gè)向量長(zhǎng)度為4個(gè)字節(jié)10/14/202224嵌入式OS向量表的初始化trap_init中10/14/202225嵌入式OS中斷的處理vector_irq:普通的中斷10/14/202226嵌入式OS10/14/202227嵌入式OSvector_stub的宏定義/arch/arm/kernel/entry-armv.S10/14/202228嵌入式OS10/14/202229嵌入式O
12、S_irq_user10/14/202230嵌入式OSret_to_userarch/arm/kernel/entry-common.S10/14/202231嵌入式OS_irq_svc10/14/202232嵌入式OS中斷的處理vector_fiq:快速中斷10/14/202233嵌入式OS10/14/202234嵌入式OS10/14/202235嵌入式OS異常處理1:未定義指令異常未定義指令異常,第2個(gè)向量對(duì)于協(xié)處理器的指令,arm處理器將等待協(xié)處理器來說明是否可以處理,若無響應(yīng),則產(chǎn)生未定義指令異常對(duì)于其他未定義指令,也產(chǎn)生該異常。10/14/202236嵌入式OS10/14/20223
13、7嵌入式OSarch/arm/kernel/entry-armv.S10/14/202238嵌入式OS_und_usr參見arch/arm/kernel/traps.c按hook處理,或者發(fā)送信號(hào)終止進(jìn)程的執(zhí)行10/14/202239嵌入式OS_und_svc參見arch/arm/kernel/traps.c按hook處理,或者發(fā)送信號(hào)終止進(jìn)程的執(zhí)行10/14/202240嵌入式OS中斷處理中斷跟異常不同,它并不是表示程序出錯(cuò),而是硬件設(shè)備有所動(dòng)作,所以不是簡(jiǎn)單地往當(dāng)前進(jìn)程發(fā)送一個(gè)信號(hào)就OK的主要有三種類型的中斷:I/O設(shè)備發(fā)出中斷請(qǐng)求時(shí)鐘中斷處理器間中斷(在SMP, Symmetric Mu
14、ltiprocessor上才會(huì)有這種中斷)10/14/202241嵌入式OSI/O中斷處理I/O中斷處理程序必須足夠靈活以給多個(gè)設(shè)備同時(shí)提供服務(wù)比如幾個(gè)設(shè)備可以共享同一個(gè)IRQ線(2個(gè)8259級(jí)聯(lián)也只能提供15根IRQ線,所以外設(shè)共享IRQ線是很正常的)這就意味著僅僅中斷向量解決不了全部問題10/14/202242嵌入式OS靈活性以兩種不同的方式達(dá)到IRQ共享:中斷處理程序執(zhí)行多個(gè)中斷服務(wù)例程(interrupt service routines, ISRs)。每個(gè)ISR是一個(gè)與單獨(dú)設(shè)備(共享IRQ線)相關(guān)的函數(shù)IRQ動(dòng)態(tài)分配:一條IRQ線在可能的最后時(shí)刻才與一個(gè)設(shè)備相關(guān)聯(lián)10/14/2022
15、43嵌入式OS為了保證系統(tǒng)對(duì)外部的響應(yīng),一個(gè)中斷處理程序必須被盡快的完成。因此,把所有的操作都放在中斷處理程序中并不合適Linux中把緊隨中斷要執(zhí)行的操作分為三類緊急的(critical)一般關(guān)中斷運(yùn)行。諸如對(duì)PIC應(yīng)答中斷,對(duì)PIC或是硬件控制器重新編程,或者修改由設(shè)備和處理器同時(shí)訪問的數(shù)據(jù)10/14/202244嵌入式OS非緊急的(noncritical)如修改那些只有處理器才會(huì)訪問的數(shù)據(jù)結(jié)構(gòu)(例如按下一個(gè)鍵后讀掃描碼),這些也要很快完成,因此由中斷處理程序立即執(zhí)行,不過一般在開中斷的情況下10/14/202245嵌入式OS非緊急可延遲的(noncritical deferrable)如把
16、緩沖區(qū)內(nèi)容拷貝到某個(gè)進(jìn)程的地址空間(例如把鍵盤緩沖區(qū)內(nèi)容發(fā)送到終端處理程序進(jìn)程)。這些操作可以被延遲較長(zhǎng)的時(shí)間間隔而不影響內(nèi)核操作,有興趣的進(jìn)程將會(huì)等待數(shù)據(jù)。內(nèi)核用在一個(gè)更為合適的時(shí)機(jī)用獨(dú)立的函數(shù)來執(zhí)行這些操作10/14/202246嵌入式OS不管引起中斷的設(shè)備是什么,所有的I/O中斷處理程序都執(zhí)行相同的基本操作1,若有必要,進(jìn)入核心態(tài)2,在內(nèi)核態(tài)堆棧保存上下文(用戶態(tài)核心態(tài))3,調(diào)用asm_do_IRQ4,恢復(fù)上下文5,若有必要,返回用戶態(tài)10/14/202247嵌入式OS中斷處理asm_do_IRQ()函數(shù)arch/arm/kernel/irq.cinclude/asm-arm/mach/
17、irq.h10/14/202248嵌入式OSasm_do_IRQ使用的數(shù)據(jù)結(jié)構(gòu)(體系結(jié)構(gòu)無關(guān))irq_desc數(shù)組包含了NR_IRQS個(gè)irq_desc_t描述符NIrq_descIrq_chip中斷控制器處理例程每一個(gè)中斷號(hào)具有一個(gè)描述符,使用action鏈表連接共享同一個(gè)中斷號(hào)的多個(gè)設(shè)備和中斷10/14/202249嵌入式OS查看相關(guān)數(shù)據(jù)結(jié)構(gòu)查看irq_desc數(shù)組的定義和最初的初始化include/linux/irq.hkernel/irq/handle.c10/14/202250嵌入式OSirqaction數(shù)據(jù)結(jié)構(gòu)用來實(shí)現(xiàn)IRQ的共享,維護(hù)共享irq的特定設(shè)備和特定中斷,所有共享一個(gè)i
18、rq的鏈接在一個(gè)action表中,由中斷描述符中的action指針指向設(shè)置irqaction的函數(shù):setup_irq鏈表中斷處理程序include/linux/interrupt.hkernel/irq/manage.c10/14/202251嵌入式OSirq_chip數(shù)據(jù)結(jié)構(gòu)為特定PIC編寫的低級(jí)I/O例程例如為一個(gè)中斷設(shè)置irq_chipset_irq_chiparch/arm/plat-s3c24xx/irq.ckernel/irq/chip.c10/14/202252嵌入式OS例如,Init_IRQ的中斷初始化arch/arm/kernel/irq.c函數(shù)setup_arch:函數(shù)s
19、etup_arch:10/14/202253嵌入式OS關(guān)于machine_arch_type以s3c2410為例include/asm-arm/mach-types.harch/arm/kernel/setup.c10/14/202254嵌入式OS關(guān)于machine_descinclude/asm-arm/mach/arch.h10/14/202255嵌入式OS10/14/202256嵌入式OS以smdk2410為例arch/arm/mach-s3c2410/mach-smdk2410.c閱讀:arch/arm/plat-s3c24xx/irq.c10/14/202257嵌入式OSirq_de
20、sc的第一個(gè)數(shù)據(jù)項(xiàng):irq_flow_handler_t handle_irq_set_irq_handler設(shè)置handle_irq數(shù)據(jù)項(xiàng)handle_level_irq handle_simple_irqhandle_fasteoi_irqhandle_edge_irqhandle_percpu_irqarch/arm/plat-s3c24xx/irq.ckernel/irq/chip.c10/14/202258嵌入式OSActionhandle在setup_irq時(shí),給定例如arch/arm/plat-s3c24xx/time.c10/14/202259嵌入式OS中斷處理asm_do_I
21、RQ()函數(shù)arch/arm/kernel/irq.cinclude/asm-arm/mach/irq.h10/14/202260嵌入式OS以handle_level_irq為例handle_level_irqhandle_IRQ_event(irq, action);kernel/irq/handle.c10/14/202261嵌入式OS小結(jié):中斷處理過程根據(jù)需要進(jìn)入核心態(tài)保存上下文調(diào)用asm_do_IRQ根據(jù)中斷號(hào),找到中斷處理函數(shù)處理恢復(fù)上下文根據(jù)需要返回用戶態(tài)10/14/202262嵌入式OS主要內(nèi)容中斷信號(hào)的作用和中斷信號(hào)處理的一般原則I/O設(shè)備如何引起CPU中斷x86 CPU如何在
22、硬件級(jí)處理中斷信號(hào)Linux內(nèi)核中軟件級(jí)中斷處理及其數(shù)據(jù)結(jié)構(gòu)Linux的軟中斷、tasklet以及下半部分10/14/202263嵌入式OS軟中斷、tasklet以及下半部分對(duì)內(nèi)核來講,可延遲中斷不是很緊急,可以將它們從中斷處理例程中抽取出來,保證較短的中斷響應(yīng)時(shí)間Linux2.6提供了三種方法可延遲的函數(shù)軟中斷、taskletTasklet在軟中斷之上實(shí)現(xiàn)一般原則:在同一個(gè)CPU上軟中斷/tasklet不嵌套軟中斷由內(nèi)核靜態(tài)分配(編譯時(shí)確定)Tasklet可以在運(yùn)行時(shí)分配和初始化(例如裝入一個(gè)內(nèi)核模塊時(shí))工作隊(duì)列( work queues )10/14/202264嵌入式OS軟中斷初始化激活
23、屏蔽執(zhí)行tasklettasklet_hitasklettasklettasklet下半部分激活導(dǎo)致一個(gè)相應(yīng)的tasklet插入10/14/202265嵌入式OS一般而言,可延遲函數(shù)上可以執(zhí)行4種操作初始化:定義一個(gè)新的可延遲函數(shù),通常在內(nèi)核初始化時(shí)進(jìn)行激活:設(shè)置可延遲函數(shù)在下一輪處理中執(zhí)行屏蔽:有選擇的屏蔽一個(gè)可延遲函數(shù),這樣即使被激活也不會(huì)被運(yùn)行執(zhí)行:在特定的時(shí)間執(zhí)行可延遲函數(shù)10/14/202266嵌入式OSLinux2.6.26使用有限個(gè)軟中斷軟中斷優(yōu)先級(jí)0:處理高優(yōu)先級(jí)的tasklet和下半部分優(yōu)先級(jí)2:把數(shù)據(jù)包傳送到網(wǎng)卡優(yōu)先級(jí)3:從網(wǎng)卡接受數(shù)據(jù)包優(yōu)先級(jí)5:處理tasklet優(yōu)先級(jí)1
24、:與時(shí)鐘中斷相關(guān)的tasklet優(yōu)先級(jí)4:塊設(shè)備相關(guān)優(yōu)先級(jí)6:調(diào)度SMP相關(guān)include/linux/interrupt.h10/14/202267嵌入式OS在softirq_vec中定義優(yōu)先級(jí)對(duì)應(yīng)于softirq_vec的下標(biāo)軟中斷函數(shù)及其參數(shù)kernel/softirq.cinclude/linux/interrupt.h10/14/202268嵌入式OS軟中斷的初始化初始化軟中斷函數(shù)分別在softirq_init和net_dev_init、blk_dev_init等中初始化例如kernel/et/core/dev.ckernel/softirq.c10/14/202269嵌入式OS軟中
25、斷的觸發(fā)raise_softirqinclude/asm-blackfin/hardirq.htypedef struct unsigned int _softirq_pending;unsigned int local_timer_irqs; _cacheline_aligned irq_cpustat_t;kernel/softirq.c#ifndef _ARCH_IRQ_STATirq_cpustat_t irq_statNR_CPUS _cacheline_aligned;EXPORT_SYMBOL(irq_stat);#endifkernel/softirq.c10/14/202270嵌入式OS軟中斷的檢查local_softirq_pending在某些特定的時(shí)機(jī),會(huì)檢查是否有軟中斷被掛起調(diào)用l
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程款撥付與節(jié)能減排協(xié)議
- 2025年度個(gè)人創(chuàng)業(yè)貸款中介代理服務(wù)合同(含政策咨詢)
- 旅游景區(qū)設(shè)施居間銷售合同
- 2025年度房屋贈(zèng)與及智能家居系統(tǒng)安裝合同
- 2025年度房屋代購(gòu)與智能家居系統(tǒng)集成協(xié)議
- 2025年度拆遷安置房抵押貸款服務(wù)合同
- 2025年度電動(dòng)自行車貸款抵押服務(wù)協(xié)議
- 2025年個(gè)人投資入股文化創(chuàng)意產(chǎn)業(yè)合作協(xié)議
- 2025年度土地個(gè)人承包經(jīng)營(yíng)權(quán)委托管理合同
- 2025年度企業(yè)退休項(xiàng)目經(jīng)理再聘用服務(wù)協(xié)議
- 中國(guó)慢性冠脈綜合征患者診斷及管理指南2024版解讀
- 2021眾海ZH6300火災(zāi)報(bào)警控器(聯(lián)動(dòng)型)使用手冊(cè)
- 電氣控制與PLC應(yīng)用技術(shù)(FX5U) 課件 模塊3 基本邏輯指令的應(yīng)用
- 電氣自動(dòng)化技術(shù)專業(yè)人才需求崗位分析及崗位職責(zé)能力分析報(bào)告
- 2024年江蘇食品藥品職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫附答案
- HYT 215-2017 近岸海域海洋生物多樣性評(píng)價(jià)技術(shù)指南
- 學(xué)校安全教育培訓(xùn)省公開課金獎(jiǎng)全國(guó)賽課一等獎(jiǎng)微課獲獎(jiǎng)?wù)n件
- 柴油發(fā)電機(jī)基礎(chǔ)知識(shí)教案
- SHT 3005-2016 石油化工自動(dòng)化儀表選型設(shè)計(jì)規(guī)范
- 2024年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫及答案解析
- 陽光分級(jí)閱讀 Letters for Mr James 課件
評(píng)論
0/150
提交評(píng)論