




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Cortex M3基礎(chǔ) 寄存器組 特殊功能寄存器組 操作模式 異常和中斷 向量表 存儲(chǔ)器保護(hù)單元 堆棧區(qū)的操作 復(fù)位序列提綱寄存器組CM3 擁有通用寄存器R0 R15 以及一些特殊功能寄存器。R0 R12 是最“通用目的”的,但是絕大多數(shù)的16 位指令只能使用R0 R7(低組寄存器),而32 位的Thumb 2指令則可以訪問(wèn)所有通用寄存器。特殊功能寄存器有預(yù)定義的功能,而且必須通過(guò)專用的指令來(lái)訪問(wèn)。1. 通用目的寄存器R0-R7R0 R7 也被稱為低組寄存器。所有指令都能訪問(wèn)它們。它們的字長(zhǎng)全是32 位,復(fù)位后的初始值是不可預(yù)料的。2. 通用目的寄存器R8-R12R8 R12 也被稱為高組寄存
2、器。這是因?yàn)橹挥泻苌俚?6 位Thumb 指令能訪問(wèn)它們,32位的指令則不受限制。它們也是32 位字長(zhǎng),且復(fù)位后的初始值是不可預(yù)料的。3. 堆棧指針R13 R13 是堆棧指針。在CM3 處理器內(nèi)核中共有兩個(gè)堆棧指針,于是也就支持兩個(gè)堆棧。當(dāng)引用R13(或?qū)懽鱏P)時(shí),你引用到的是當(dāng)前正在使用的那一個(gè),另一個(gè)必須用特殊的指令來(lái)訪問(wèn)(MRS,MSR 指令)。這兩個(gè)堆棧指針?lè)謩e是: 主堆棧指針(MSP),或?qū)懽鱏P_main。這是缺省的堆棧指針,它由OS 內(nèi)核、異常服務(wù)例程以及所有需要特權(quán)訪問(wèn)的應(yīng)用程序代碼來(lái)使用。 進(jìn)程堆棧指針(PSP),或?qū)懽鱏P_process。用于常規(guī)的應(yīng)用程序代碼(不處于異
3、常服用例程中時(shí))。要注意的是,并不是每個(gè)應(yīng)用都必須用齊兩個(gè)堆棧指針。簡(jiǎn)單的應(yīng)用程序只使用MSP就夠了。堆棧指針用于訪問(wèn)堆棧,并且PUSH 指令和POP 指令默認(rèn)使用SP。在Cortex M3 中,有專門的指令負(fù)責(zé)堆棧操作PUSH 和POP。它倆的匯編語(yǔ)言語(yǔ)法如下例所演示PUSH R0 ; *(-R13)=R0。R13 是long*的指針POP R0 ; R0= *R13+請(qǐng)注意后面C 程序風(fēng)格的注釋,ortex M3 中的堆棧以這種方式來(lái)使用的,這就是所謂的“向下生長(zhǎng)的滿?!保ū菊潞竺嬖谥v到堆棧內(nèi)存操作時(shí)還要展開(kāi)論述)。因此,在PUSH 新數(shù)據(jù)時(shí),堆棧指針先減一個(gè)單元。通常在進(jìn)入一個(gè)子程序后,
4、第一件事就是把寄存器的值先PUSH 入堆棧中,在子程序退出前再POP 曾經(jīng)PUSH 的那些寄存器。另外,PUSH 和POP 還能一次操作多個(gè)寄存器,如下所示:subroutine_1PUSH R0-R7, R12, R14 ; 保存寄存器列表 ; 執(zhí)行處理POP R0-R7, R12, R14 ; 恢復(fù)寄存器列表BX R14 ; 返回到主調(diào)函數(shù)在程序中為了突出重點(diǎn),你可以使用SP 表示R13。在程序代碼中,both MSP 和PSP 都被稱為R13/SP。不過(guò),我們可以通過(guò)MRS/MSR 指令來(lái)指名道姓地訪問(wèn)具體的堆棧指針。MSP,亦寫作SP_main,這是復(fù)位后缺省使用堆棧指針,服務(wù)于操作系
5、統(tǒng)內(nèi)核和異常服務(wù)例程;而PSP,亦寫作SP_process,典型地用于普通的用戶線程中。寄存器的PUSH 和POP 操作永遠(yuǎn)都是4 字節(jié)對(duì)齊的也就是說(shuō)他們的地址必須是0 x4,0 x8,0 xc,。這樣一來(lái),R13 的最低兩位被硬線連接到0,并且總是讀出0(Read As Zero)。4. 連接寄存器R14R14 是連接寄存器(LR)。在一個(gè)匯編程序中,你可以把它寫作both LR 和R14。LR 用于在調(diào)用子程序時(shí)存儲(chǔ)返回地址。例如,當(dāng)你在使用BL(分支并連接,Branch and Link)指令時(shí),就自動(dòng)填充LR 的值。main ;主程序BL function1 ; 使用“分支并連接”指令
6、呼叫function1; PC= function1,并且LR=main 的下一條指令地址Function1 ; function1 的代碼BX LR ; 函數(shù)返回(如果function1 要使用LR,必須在使用前PUSH,否則返回時(shí)程序就可能跑飛了譯注)盡管PC 的LSB 總是0(因?yàn)榇a至少是字對(duì)齊的),LR 的LSB 卻是可讀可寫的。這是歷史遺留的產(chǎn)物。在以前,由位0 來(lái)指示ARM/Thumb 狀態(tài)。因?yàn)槠渌行〢RM 處理器支持ARM 和Thumb 狀態(tài)并存,為了方便匯編程序移植,CM3 需要允許LSB 可讀可寫。5. 程序計(jì)數(shù)器R15 R15 是程序計(jì)數(shù)器,在匯編代碼中你也可以使用名
7、字“PC”來(lái)訪問(wèn)它。因?yàn)镃M3 內(nèi)部使用了指令流水線,讀PC 時(shí)返回的值是當(dāng)前指令的地址+4。比如說(shuō):0 x1000: MOV R0, PC ; R0 = 0 x1004如果向PC 中寫數(shù)據(jù),就會(huì)引起一次程序的分支(但是不更新LR 寄存器)。CM3 中的指令至少是半字對(duì)齊的,所以PC 的LSB 總是讀回0。然而,在分支時(shí),無(wú)論是直接寫在分支時(shí),無(wú)論是直接寫PC 的值還是使用分支指令,都必須保證加載到的值還是使用分支指令,都必須保證加載到PC 的數(shù)值是奇數(shù)(即的數(shù)值是奇數(shù)(即LSB=1),用以表明這是在),用以表明這是在Thumb 狀態(tài)下執(zhí)行。倘狀態(tài)下執(zhí)行。倘若寫了若寫了0,則視為企圖轉(zhuǎn)入,則視
8、為企圖轉(zhuǎn)入ARM 模式,模式,CM3 將產(chǎn)生一個(gè)將產(chǎn)生一個(gè)fault 異常。異常。二、特殊功能寄存器組Cortex M3 中的特殊功能寄存器包括: 程序狀態(tài)寄存器組(PSRs 或曰xPSR) 中斷屏蔽寄存器組(PRIMASK, FAULTMASK,以及BASEPRI) 控制寄存器(CONTROL)它們只能被專用的MSR 和MRS 指令訪問(wèn),而且它們也沒(méi)有存儲(chǔ)器地址。MRS , ;讀特殊功能寄存器的值到通用寄存器MSR , ;寫通用寄存器的值到特殊功能寄存器1.程序狀態(tài)寄存器(PSRs 或PSR)程序狀態(tài)寄存器在其內(nèi)部又被分為三個(gè)子狀態(tài)寄存器: 應(yīng)用程序 PSR(APSR) 中斷號(hào) PSR(IP
9、SR) 執(zhí)行 PSR(EPSR)通過(guò)MRS/MSR 指令,這3 個(gè)PSRs 即可以單獨(dú)訪問(wèn),也可以組合訪問(wèn)(2 個(gè)組合,3 個(gè)組合都可以)。當(dāng)使用三合一的方式訪問(wèn)時(shí),應(yīng)使用名字“xPSR”或者“PSR”。2. PRIMASK, FAULTMASK 和BASEPRI這三個(gè)寄存器用于控制異常的使能和除能。名字功能描述PRIMASK這是個(gè)只有1 個(gè)位的寄存器。當(dāng)它置1 時(shí),就關(guān)掉所有可屏蔽的異常,只剩下NMI和硬fault 可以響應(yīng)。它的缺省值是0,表示沒(méi)有關(guān)中斷。FAULTMASK這是個(gè)只有1 個(gè)位的寄存器。當(dāng)它置1 時(shí),只有NMI 才能響應(yīng),所有其它的異常,包括中斷和fault,通通閉嘴。它的缺
10、省值也是0,表示沒(méi)有關(guān)異常。BASEPRI這個(gè)寄存器最多有9 位(由表達(dá)優(yōu)先級(jí)的位數(shù)決定)。它定義了被屏蔽優(yōu)先級(jí)的閾值。當(dāng)它被設(shè)成某個(gè)值后,所有優(yōu)先級(jí)號(hào)大于等于此值的中斷都被關(guān)(優(yōu)先級(jí)號(hào)越大,優(yōu)先級(jí)越低)。但若被設(shè)成0,則不關(guān)閉任何中斷,0 也是缺省值。對(duì)于時(shí)間 關(guān)鍵任務(wù)而言,PRIMASK 和BASEPRI 對(duì)于暫時(shí)關(guān)閉中斷是非常重要的。而FAULTMASK 則可以被OS 用于暫時(shí)關(guān)閉fault 處理機(jī)能,這種處理在某個(gè)任務(wù)崩潰時(shí)可能需要。因?yàn)樵谌蝿?wù)崩潰時(shí),常常伴隨著一大堆faults。在系統(tǒng)料理“后事”時(shí),通常不再需要響應(yīng)這些fault人死帳清。總之FAULTMASK 就是專門留給OS 用
11、的。要訪問(wèn)PRIMASK, FAULTMASK 以及BASEPRI,同樣要使用MRS/MSR 指令,如:MRS R0, BASEPRI ;讀取BASEPRI 到R0 中MRS R0, FAULTMASK ;似上MRS R0, PRIMASK ;似上MSR BASEPRI, R0 ;寫入R0 到BASEPRI 中MSR FAULTMASK, R0 ;似上MSR PRIMASK, R0 ;似上只有在特權(quán)級(jí)下,才允許訪問(wèn)這3 個(gè)寄存器。其實(shí),為了快速地開(kāi)關(guān)中斷,CM3 還專門設(shè)置了一條CPS 指令,有4 種用法CPSID I ;PRIMASK=1, ;關(guān)中斷CPSIE I ;PRIMASK=0, ;
12、開(kāi)中斷CPSID F ;FAULTMASK=1, ;關(guān)異常CPSIE F ;FAULTMASK=0 ;開(kāi)異常3.控制寄存器(CONTROL)控制寄存器用于定義特權(quán)級(jí)別,還用于選擇當(dāng)前使用哪個(gè)堆棧指針。位功能CONTROL1堆棧指針選擇0=選擇主堆棧指針MSP(復(fù)位后缺省值)1=選擇進(jìn)程堆棧指針PSP在線程或基礎(chǔ)級(jí)(沒(méi)有在響應(yīng)異常譯注),可以使用PSP。在handler 模式下,只允許使用MSP,所以此時(shí)不得往該位寫1。CONTROL00=特權(quán)級(jí)的線程模式1=用戶級(jí)的線程模式Handler 模式永遠(yuǎn)都是特權(quán)級(jí)的。CONTROL1在Cortex M3 的handler 模式中,CONTROL1總是
13、0。在線程模式中則可以為0 或1。僅當(dāng)處于特權(quán)級(jí)的線程模式下,此位才可寫,其它場(chǎng)合下禁止寫此位。改變處理器的模式也有其它的方式:在異常返回時(shí),通過(guò)修改LR 的位2,也能實(shí)現(xiàn)模式切換。這將在第5章中展開(kāi)論述。CONTROL0僅當(dāng)在特權(quán)級(jí)下操作時(shí)才允許寫該位。一旦進(jìn)入了用戶級(jí),唯一返回特權(quán)級(jí)的途徑,就是觸發(fā)一個(gè)(軟)中斷,再由服務(wù)例程改寫該位。CONTROL 寄存器也是通過(guò)MRS 和MSR 指令來(lái)操作的:MRS R0, CONTROLMSR CONTROL, R0三、操作模式Cortex M3 支持2 個(gè)模式和兩個(gè)特權(quán)等級(jí)。當(dāng)處理器處在線程狀態(tài)下時(shí),既可以使用特權(quán)級(jí),也可以使用用戶級(jí);另一方面,h
14、andler模式總是特權(quán)級(jí)的。在復(fù)位后,處理器進(jìn)入線程模式特權(quán)級(jí)。在線程模式用戶級(jí)下,對(duì)系統(tǒng)控制空間(SCS)的訪問(wèn)將被阻止該空間包含了配置寄存器s 以及調(diào)試組件的寄存器s。除此之外,還禁止使用MSR 訪問(wèn)剛才講到的特殊功能寄存器除了APSR 有例外。誰(shuí)若是以身試法,則將fault 伺候。在特權(quán)級(jí)下的代碼可以通過(guò)置位CONTROL0來(lái)進(jìn)入用戶級(jí)。而不管是任何原因產(chǎn)生了任何異常,處理器都將以特權(quán)級(jí)來(lái)運(yùn)行其服務(wù)例程,異常返回后將回到產(chǎn)生異常之前的特權(quán)級(jí)。用戶級(jí)下的代碼不能再試圖修改CONTROL0來(lái)回到特權(quán)級(jí)。它必須通過(guò)一個(gè)異常handler,由那個(gè)異常handler 來(lái)修改CONTROL0,才能
15、在返回到線程模式后拿到特權(quán)級(jí)。把代碼按特權(quán)級(jí)和用戶極分開(kāi)對(duì)待,有利于使架構(gòu)更加安全和健壯。例如,當(dāng)某個(gè)用戶代碼出問(wèn)題時(shí),不會(huì)讓它成為害群之馬,因?yàn)橛脩艏?jí)的代碼是禁止寫特殊功能寄存器和NVIC中寄存器的。另外,如果還配有MPU,保護(hù)力度就更大,甚至可以阻止用戶代碼訪問(wèn)不屬于它的內(nèi)存區(qū)域。為了避免系統(tǒng)堆棧因應(yīng)用程序的錯(cuò)誤使用而毀壞,你可以給應(yīng)用程序?qū)iT配一個(gè)堆棧,不讓它共享操作系統(tǒng)內(nèi)核的堆棧。在這個(gè)管理制度下,運(yùn)行在線程模式的用戶代碼使用PSP,而異常服務(wù)例程則使用MSP。這兩個(gè)堆棧指針的切換是全自動(dòng)的,就在出入異常服務(wù)例程時(shí)由硬件處理。第8 章將詳細(xì)討論此主題。如前所述,特權(quán)等級(jí)和堆棧指針的選擇
16、均由CONTROL 負(fù)責(zé)。當(dāng)CONTROL0=0 時(shí),在異常處理的始末,只發(fā)生了處理器模式的轉(zhuǎn)換,如下圖所示。但若CONTROL0=1(線程模式+用戶級(jí)),則在中斷響應(yīng)的始末,both 處理器模式和特權(quán)等極都要發(fā)生變化,如下圖所示。CONTROL0只有在特權(quán)級(jí)下才能訪問(wèn)。用戶級(jí)的程序如想進(jìn)入特權(quán)級(jí),通常都是使用一條“系統(tǒng)服務(wù)呼叫指令(SVC)”來(lái)觸發(fā)“SVC 異?!?,該異常的服務(wù)例程可以選擇修改CONTROL0。四、異常與中斷Cortex M3 支持大量異常,包括16 4 1=11 個(gè)系統(tǒng)異常,和最多240 個(gè)外部中斷簡(jiǎn)稱IRQ。具體使用了這240 個(gè)中斷源中的多少個(gè),則由芯片制造商決定。由外
17、設(shè)產(chǎn)生的中斷信號(hào),除了SysTick 的之外,全都連接到NVIC 的中斷輸入信號(hào)線。典型情況下,處理器一般支持16 到32 個(gè)中斷,當(dāng)然也有在此之外的。作為中斷功能的強(qiáng)化,NVIC 還有一條NMI 輸入信號(hào)線。NMI 究竟被拿去做什么,還要視處理器的設(shè)計(jì)而定。在多數(shù)情況下,NMI 會(huì)被連接到一個(gè)看門狗定時(shí)器,有時(shí)也會(huì)是電壓監(jiān)視功能塊,以便在電壓掉至危險(xiǎn)級(jí)別后警告處理器。NMI 可以在任何時(shí)間被激活,甚至是在處理器剛剛復(fù)位之后。下表列出了Cortex M3 可以支持的所有異常。有一定數(shù)量的系統(tǒng)異常是用于fault 處理的,它們可以由多種錯(cuò)誤條件引發(fā)。NVIC 還提供了一些fault 狀態(tài)寄存器,
18、以便于fault 服務(wù)例程找出導(dǎo)致異常的具體原因。五、向量表當(dāng)一個(gè)發(fā)生的異常被CM3 內(nèi)核接受,對(duì)應(yīng)的異常handler 就會(huì)執(zhí)行。為了決定handler 的入口地址,CM3 使用了“向量表查表機(jī)制”。這里使用一張向量表。向量表其實(shí)是一個(gè)WORD(32 位整數(shù))數(shù)組,每個(gè)下標(biāo)對(duì)應(yīng)一種異常,該下標(biāo)元素的值則是該異常handler 的入口地址。向量表的存儲(chǔ)位置是可以設(shè)置的,通過(guò)NVIC 中的一個(gè)重定位寄存器來(lái)指出向量表的地址。在復(fù)位后,該寄存器的值為0。因此,在地址0 處必須包含一張向量表,用于初始時(shí)的異常分配。舉個(gè)例子,如果發(fā)生了異常11(SVC),則NVIC 會(huì)計(jì)算出偏移移量是11x4=0 x
19、2C,然后從那里取出服務(wù)例程的入口地址并跳入。0 號(hào)異常的功能則是個(gè)另類,它并不是什么入口地址,而是給出了復(fù)位后MSP 的初值。六、棧內(nèi)存操作在Cortex M3 中,除了可以使用PUSH 和POP 指令來(lái)處理堆棧外,內(nèi)核還會(huì)在異常處理的始末自動(dòng)地執(zhí)行PUSH 與POP 操作。本節(jié)讓我們來(lái)檢視一下具體的動(dòng)作,第9 章則討論異常處理時(shí)的自動(dòng)棧操作。1. 堆棧的基本操作籠統(tǒng)地講,堆棧操作就是對(duì)內(nèi)存的讀寫操作,但是其地址由SP 給出。寄存器的數(shù)據(jù)通過(guò)PUSH 操作存入堆棧,以后用POP 操作從堆棧中取回。在PUSH 與POP 的操作中,SP 的值會(huì)按堆棧的使用法則自動(dòng)調(diào)整,以保證后續(xù)的PUSH 不會(huì)
20、破壞先前 PUSH 進(jìn)去的內(nèi)容。堆棧的功能就是把寄存器的數(shù)據(jù)放入內(nèi)存,以便將來(lái)能恢復(fù)之當(dāng)一個(gè)任務(wù)或一段子程序執(zhí)行完畢后恢復(fù)。正常情況下,PUSH 與POP 必須成對(duì)使用,而且參與的寄存器,不論是身份還是先后順序都必須完全一致。當(dāng)PUSH/POP 指令執(zhí)行時(shí),SP 指針的值也根著自減/自增。2. Cortex-M3 堆棧的實(shí)現(xiàn)Cortex M3 使用的是“向下生長(zhǎng)的滿?!蹦P汀6褩V羔楽P 指向最后一個(gè)被壓入堆棧的32位數(shù)值。在下一次壓棧時(shí),SP 先自減4,再存入新的數(shù)值。POP 操作剛好相反:先從SP 指針處讀出上一次被壓入的值,再把SP 指針自增4。在進(jìn)入ISR 時(shí),CM3 會(huì)自動(dòng)把一些寄存
21、器壓棧,這里使用的是進(jìn)入ISR 之前使用的SP指針(MSP 或者是PSP)。離開(kāi)ISR 后,只要ISR 沒(méi)有更改過(guò)CONTROL1,就依然使用先前的SP 指針來(lái)執(zhí)行出棧操作。3.再論Cortex-M3 的雙堆棧機(jī)制我們已經(jīng)知道了CM3 的堆棧是分為兩個(gè):主堆棧和進(jìn)程堆棧,ONTROL1決定如何選擇。當(dāng)CONTROL1=0 時(shí),只使用MSP,此時(shí)用戶程序和異常handler 共享同一個(gè)堆棧。這也是復(fù)位后的缺省使用方式。當(dāng)CONTROL1=1 時(shí),線程模式將使用PSP,此時(shí),進(jìn)入異常時(shí)的自動(dòng)壓棧使用的是進(jìn)程堆棧,進(jìn)入異常handler 后才自動(dòng)改為MSP,退出異常時(shí)切換回PSP,并且從進(jìn)程堆棧上彈
22、出數(shù)據(jù)。在特權(quán)級(jí)下,可以指定具體的堆棧指針,而不受當(dāng)前使用堆棧的限制,示例代碼如下:MRS R0, MSP ; 讀取主堆棧指針到R0MSR MSP, R0 ; 寫入R0 的值到主堆棧中MRS R0, PSP ; 讀取進(jìn)程堆棧指針到R0MSR PSP, R0 ; 寫入R0 的值到進(jìn)程堆棧中通過(guò)讀取PSP 的值,OS 就能夠獲取用戶應(yīng)用程序使用的堆棧,進(jìn)一步地就知道了在發(fā)生異常時(shí),被壓入寄存器的內(nèi)容,而且還可以把其它寄存器進(jìn)一步壓棧(使用STMDB和LDMIA的書(shū)寫形式)。OS 還可以修改PSP,用于實(shí)現(xiàn)多任務(wù)中的任務(wù)上下文切換。六、復(fù)位序列在離開(kāi)復(fù)位狀態(tài)后,CM3 做的第一件事就是讀取下列兩個(gè)32 位整數(shù)的值: 從地址 0 x0000,0000 處取出MSP 的初始值。 從地址 0 x0000,0004 處取出PC 的初始值這個(gè)值是復(fù)位向量,LSB 必須是1。然后從這個(gè)值所對(duì)應(yīng)的地址處取指。請(qǐng)注意,這與傳統(tǒng)的ARM 架構(gòu)不同其實(shí)也和絕大多數(shù)的其它單片機(jī)不同。傳統(tǒng)的ARM 架構(gòu)總是從0 地址開(kāi)始執(zhí)行第一條指令。它們的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年圣誕節(jié)酒店宣傳方案范文(9篇)
- 一般施工方案
- 路燈節(jié)能改造工程規(guī)劃設(shè)計(jì)方案(參考范文)
- 跨境金融保障措施實(shí)施方案
- 精神衛(wèi)生中心建設(shè)項(xiàng)目可行性研究報(bào)告(參考模板)
- 供水管道換新改造項(xiàng)目實(shí)施方案(模板)
- 湖北經(jīng)濟(jì)學(xué)院《微機(jī)保護(hù)及其測(cè)試技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧職業(yè)學(xué)院《隨機(jī)信號(hào)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州幼兒師范高等??茖W(xué)?!缎旅襟w編輯》2023-2024學(xué)年第二學(xué)期期末試卷
- 杭州醫(yī)學(xué)院《微機(jī)與微控制器原理》2023-2024學(xué)年第二學(xué)期期末試卷
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 數(shù)學(xué)試卷(含答案詳解)
- 中外比較文學(xué)研究專題智慧樹(shù)知到期末考試答案2024年
- 多聯(lián)機(jī)電控常見(jiàn)故障及維修(課堂PPT)
- 生命體征的測(cè)量ppt課件
- DLT667-1999(IEC60870-5-103)規(guī)約詳解
- 水中氯離子測(cè)定方法
- 心臟體格檢查教案(共5頁(yè))
- 美國(guó)聯(lián)邦民事訴訟規(guī)則
- 絕對(duì)干貨污水處理廠經(jīng)濟(jì)評(píng)價(jià)表(全)
- 外貿(mào)中英文商業(yè)發(fā)票
- 單相橋式逆變電路的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論