版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六講
中斷與設(shè)備驅(qū)動(dòng)張哲ASIC工程中心
中斷的重要性??!理解處理器對(duì)中斷的管理以及這其中的堆棧管理對(duì)于理解操作系統(tǒng)是至關(guān)重要的!中斷是操作系統(tǒng)的入口,用戶訪問(wèn)操作系統(tǒng)提供的服務(wù)的唯一途徑是依靠中斷來(lái)實(shí)現(xiàn)的。實(shí)時(shí)系統(tǒng)對(duì)異步事件的處理,依靠的是中斷!任務(wù)的調(diào)度靠的是中斷系統(tǒng)調(diào)用的實(shí)現(xiàn)靠的是中斷在有MMU的系統(tǒng)中,虛存的管理也是依靠中斷!中斷是理解操作系統(tǒng)的入口?。∪绾螐?qiáng)調(diào)中斷的重要性都不過(guò)份,我們將在內(nèi)核的實(shí)現(xiàn)中詳細(xì)介紹!中斷概念中斷的分類(lèi)硬件中斷(HardwareInterrupt):一般是由外部(相對(duì)CPU內(nèi)核而言)的硬件引起的事件,比如串口來(lái)數(shù)據(jù),鍵盤(pán)擊鍵等;軟件中斷(SoftInterrupt):通過(guò)在程序中執(zhí)行的中斷指令引起的中斷,又叫軟陷;80X86:int指令68000:trap指令A(yù)RM:SWI指令軟中斷指令一般用于操作系統(tǒng)的系統(tǒng)調(diào)用入口;異常(Exception):由于CPU內(nèi)部在運(yùn)行過(guò)程中引起的事件,比如指令預(yù)取錯(cuò),數(shù)據(jù)中止,未定義指令等等,異常事件一般由操作系統(tǒng)接管。中斷的處理過(guò)程雖然中斷產(chǎn)生的原因不同,但是中斷響應(yīng)的硬件過(guò)程基本上是相同的??截怌PSR到SPSR_<mode>設(shè)置正確的CPSR位切換到ARM狀態(tài)切換到異常模式禁止中斷保存返回地址在LR_<mode>設(shè)置PC到異常向量地址中斷服務(wù)程序可能保存需要使用的寄存器(堆棧中)用戶服務(wù)程序可以打開(kāi)中斷,以接受中斷嵌套恢復(fù)保存的寄存器通過(guò)調(diào)用Reti(或其他相應(yīng)指令)指令將PSR和PC出棧,從而恢復(fù)原來(lái)的執(zhí)行流程。硬件完成中斷服務(wù)程序完成ARM處理器的中斷類(lèi)型異常類(lèi)型具體含義復(fù)位Reset當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。未定義指令UndefinedInstruction當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真。軟件中斷SoftwareInterrupt該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。指令預(yù)取中止PrefetchAbort若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。ARM處理器的中斷類(lèi)型異常類(lèi)型具體含義數(shù)據(jù)中止DataAbort若處理器數(shù)據(jù)訪問(wèn)指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常。IRQ(外部中斷請(qǐng)求)當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)。FIQ(快速中斷請(qǐng)求)當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。異常向量表異常向量表中指定了各異常及其處理程序的對(duì)應(yīng)關(guān)系,它通常存放在存儲(chǔ)器地址的低端。在ARM體系中,異常向量表的大小為32字節(jié)。其中,每個(gè)異常占據(jù)4個(gè)字節(jié)大小,保留了4個(gè)字節(jié)空間。每個(gè)異常對(duì)應(yīng)了異常向量表中的4個(gè)字節(jié)的空間,其中存放了一個(gè)跳轉(zhuǎn)指令或者一個(gè)向PC寄存器中賦值的數(shù)據(jù)訪問(wèn)指令。通過(guò)這兩種指令,程序?qū)⑻D(zhuǎn)到相應(yīng)的異常處理程序處執(zhí)行。
當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí),系統(tǒng)根據(jù)固定的優(yōu)先級(jí)決定異常的處理次序。當(dāng)然有些異常是不可能同時(shí)發(fā)生的,如指令預(yù)取中止異常和軟件中斷(SWI)異常是由同一條指令的執(zhí)行觸發(fā)的,他們是不可能同時(shí)發(fā)生的。處理器執(zhí)行某個(gè)特定的異常的過(guò)程,稱為處理器處于特定的異常模式異常向量表地址異常進(jìn)入模式優(yōu)先級(jí)(6最低)0x0000,0000復(fù)位管理模式10x0000,0004未定義指令未定義模式60x0000,0008軟件中斷管理模式60x0000,000C中止(預(yù)取指令)中止模式50x0000,0010中止(數(shù)據(jù))中止模式20x0000,0014保留保留未使用0x0000,0018IRQIRQ40x0000,001CFIQFIQ3向量表地址異常處理返回通用寄存器的恢復(fù)通用寄存器的恢復(fù)采用一般的堆棧操作指令狀態(tài)寄存器的恢復(fù)PC指針的恢復(fù)MOVSpc,lrSUBSpc,lr,#4LDMFDsp!,{pc}^從異常處理程序中返回包括下面兩個(gè)基本操作恢復(fù)被中斷的程序處理器的狀態(tài),即將SPSR_mode寄存器內(nèi)容復(fù)制到當(dāng)前程序狀態(tài)寄存器CPSR中。返回到發(fā)生異常的下一條指令處執(zhí)行,即將lr_mode寄存器的內(nèi)容復(fù)制到程序計(jì)數(shù)器PC中。異常返回時(shí)另一個(gè)非常重要的問(wèn)題返回地址的確定在異常發(fā)生時(shí)處理器會(huì)有一個(gè)保存LR的動(dòng)作,但是該保存值并不一定是正確中斷的返回地址下面以一個(gè)簡(jiǎn)單的指令執(zhí)行流水狀態(tài)圖來(lái)對(duì)此加以說(shuō)明指令執(zhí)行流水狀態(tài)圖ARM處理器的中斷嵌套C語(yǔ)言中的中斷處理在標(biāo)準(zhǔn)C中不包含中斷。許多編譯開(kāi)發(fā)商在標(biāo)準(zhǔn)C上增加了對(duì)中斷的支持,提供新的關(guān)鍵字用于標(biāo)示中斷服務(wù)程序(ISR),類(lèi)似于__interrupt、#programinterrupt當(dāng)一個(gè)函數(shù)被定義為ISR的時(shí)候,編譯器會(huì)自動(dòng)為該函數(shù)增加中斷服務(wù)程序所需要的中斷現(xiàn)場(chǎng)入棧和出棧代碼。
_irq關(guān)鍵字保存ATPCS(ARM-THUMBprocedurecallstandard)規(guī)定的被破壞的寄存器保存其他中斷處理程序中用到的寄存器同時(shí)將(LR-4)賦予程序計(jì)數(shù)器PC實(shí)現(xiàn)中斷處理程序的返回,并且恢復(fù)CPSR寄存器的內(nèi)容例子_irqvoidIRQHandler(void){volatileunsignedint*source=(unsignedint*)0x80000000;if(*source==1)int_handler_1();
*(source)=0;}STMFD SP!,{r0-r4,r12,lr}MOVr4,#0x80000000LDR r0,[r4,#0]CMP r0,#1BLEQ int_handler_1MOV r0,#0STR r0,[r4,#0] LDMFD sp!,{r0-r4,r12,lr}SUBS pc,lr,#4中斷處理的基本原則快速快速響應(yīng),也就是說(shuō)CPU要盡快地響應(yīng)中斷請(qǐng)求加快中斷處理的速度保護(hù)對(duì)于全局?jǐn)?shù)據(jù)結(jié)構(gòu)和其他臨界資源需要進(jìn)行必要的互斥保護(hù)用C編寫(xiě)中斷服務(wù)程序應(yīng)該注意的不能返回值;不能向ISR傳遞參數(shù);ISR應(yīng)該盡可能的短小精悍;printf(char*lpFormatString,…)函數(shù)會(huì)帶來(lái)重入和性能問(wèn)題,不能在ISR中采用。(在ARM平臺(tái)上由于半主機(jī)機(jī)制,該函數(shù)的速度更慢?。┢鋵?shí)還包括所有的不可重入的函數(shù)都不應(yīng)該在中斷中使用。程序員應(yīng)該仔細(xì)地評(píng)估ANSIC庫(kù)函數(shù)和OS的系統(tǒng)調(diào)用浮點(diǎn)運(yùn)算以及其他的耗時(shí)操作都不應(yīng)該在中斷程序中使用
加快中斷處理程序的方法在中斷處理程序中只進(jìn)行最基本的硬件操作,比如讀出硬件寄存器的數(shù)據(jù),或者改變狀態(tài)寄存器的值然后通過(guò)一定的方法將中斷的事件做一個(gè)標(biāo)志,在離開(kāi)中斷處理程序后,由其他代碼根據(jù)中斷標(biāo)志進(jìn)行后續(xù)的處理這樣做的好處是大大加快了中斷的處理時(shí)間常見(jiàn)的方法:在沒(méi)有OS的情況下可以使用自定義的隊(duì)列,在中斷處理程序之外的主循環(huán)中對(duì)中斷的事件進(jìn)行處理。
Linux下的Bottomhalf&TophalfASIXOS中的系統(tǒng)任務(wù)沒(méi)有OS的中斷服務(wù)隊(duì)列如何確保中斷處理程序盡快完成確保沒(méi)有在中斷處理程序中調(diào)用不可重入函數(shù)以及其他臨界資源。沒(méi)有OS的中斷服務(wù)隊(duì)列/*存放中斷的隊(duì)列*/
typedefstructtagIntQueue
{
intintType;/*中斷類(lèi)型*/
structtagIntQueue*next;
}IntQueue;
IntQueuelpIntQueueHead;
__interruptISRexample()
{
intintType;
intType=GetSystemType();
QueueAddTail(lpIntQueueHead,intType);/*在隊(duì)列尾加入新的中斷*/
}While(1)//在主循環(huán)中檢查中斷并處理之
{
If(!IsIntQueueEmpty())
{
intType=GetFirstInt();
switch(intType)/*是不是很象WIN32程序的消息解析函數(shù)?*/
{
/*對(duì),我們的中斷類(lèi)型解析很類(lèi)似于消息驅(qū)動(dòng)*/
casexxx:/*我們稱其為"中斷驅(qū)動(dòng)"吧?*/
…
break;
casexxx:
…
break;
…
}
}
}有OS的情況下中斷將變得更復(fù)雜一般而言O(shè)S將接管中斷向量表,中斷發(fā)生時(shí),首先由OS接管中斷OS將檢查真正的中斷源是什么,然后才調(diào)用真正的中斷處理程序ASIXOS下的中斷初始化;/*****************************************************; filename: boot.s; descrition: bootthearmprocessor; history: 2003-1-715:59lccreate;*****************************************************/ includehardware_gfd.h
extern main AREABOOT,CODE,READONLY ENTRY ;Markfirstinstructiontoexecute;vectortable bal RST_DO bal EXTENT_INSTRU bal SWI_DO bal ABORT_PREFETCH_DO bal ABORT_DATA_DO mov R1, R1 ;reservedexception
bal Irq_Do mov r0,r0 bal Fiq_Do ;thecodeforthefiqASIXOS下的中斷初始化;*********************************Irq_Do
stmfd sp!,{r0,r1}ldr r0,=IRQ_R1str r1,[r0]ldmfd sp!,{r0}ldr r1,=IRQ_R0str r0,[r1]add r13,r13,#4 ; //restorethesp_irqtoptooriginalirqtopsub r14,r14,#4mov r0,r14mrs r1,spsrorr r1,r1,#0x80msr cpsr_cxsf,r1; //changeirqmodeintosvc;------------------------------------------------ bic r1,r1,#0x80; //cleartheirqmaskstmfd sp!,{r0}stmfd sp!,{r14}stmfd sp!,{r1}ldr r0,=IRQ_R1ldr r1,[r0]stmfd sp!,{r1}ldr r1,=IRQ_R0ldr r0,[r1]stmfd sp!,{r0}ldmfd sp!,{r0,r1}stmfd sp!,{r0-r12}; //savetheregistersr0--r12IMPORT int_vector_handlerbl int_vector_handlerASIXOS下的中斷初始化void(*IntHandler[32])(void)={/*interruptnumberanddescription,handler*//*00INT_NULL,*/ENT_INT_EMPTY,/*01INT_EXT0,(PE0)*/ENT_INT_RING1,/*02INT_EXT1,(PE1)*/ NULL,/*03INT_EXT2,(PE2)*/ NULL,/*04INT_EXT3,(PE3)*/ENT_INT_RING2,/*05INT_EXT4,(PE4)*/ NULL,/*06INT_EXT5,(PE5)*/ NULL,/*07INT_EXT6,(PE6)*/ENT_INT_RING3,/*08INT_EXT7,(PE7)*/ NULL,/*09INT_EXT8,(PE8)*/ NULL,/*10INT_EXT9,(PE9*/ENT_INT_BUTTON,/*11INT_EXT10,(PE10)*/ NULL,/*12INT_EXT11,(PE11)*/ NULL,/*13INT_EXT12,(PH0)*/ NULL,/*14INT_EXT13,(PH1)*/ENT_INT_SSRT,/*15INT_EXT14,(PH2)*/ NULL,/*16INT_NONE,*/ NULL,/*17INT_EXT15,(PH3)*/ NULL,/*18INT_EXT16,(PH4)*/ NULL,/*19INT_EXT17,(PH5)*/ NULL,/*20INT_LCDC,*/ NULL,/*21INT_AC97,*/ NULL,/*22INT_PWM,*/ NULL,/*23INT_UART1,*/ NULL,/*24INT_UART0,*/ NULL,/*25INT_MMC,*/ NULL,/*26INT_SPI,*/ NULL,/*27INT_USB,*/ ENT_INT_USB,/*28INT_GPT,*/ ENT_INT_GPT,/*29INT_EMI,*/ ENT_INT_EMI,/*30INT_DMA,*/ ENT_INT_DMA,/*31INT_RTC,*/ ENT_INT_RTC};ASIXOS下的中斷初始化voidint_vector_handler(void){inti;unsignedlongIFSTAT=*(RP)(INTC_IFSTAT);if(IFSTAT<1)IFSTAT=*(RP)(INTC_ISTAT)&(~*(RP)(INTC_IMSK))&*(RP)(INTC_IEN);if(IFSTAT>1){i=-1;while(IFSTAT){IFSTAT>>=1;i++;}}elsei=0;
if(IntHandler[i])(*IntHandler[i])();else{ent_int();printf("NointerruptentryforINTNO.%d\n",i);ret_int();}}通知內(nèi)核!為了通知內(nèi)核中斷的發(fā)生,往往需要在用戶的中斷服務(wù)程序中顯示地調(diào)用OS提供的系統(tǒng)調(diào)用Ent_int()通知內(nèi)核我們現(xiàn)在中斷中Ret_int()通知內(nèi)河我們離開(kāi)中斷了,如果系統(tǒng)允許則進(jìn)行調(diào)度,否則按照中斷的方式離開(kāi)-返回SampleEnt_int()與Ret_int()函數(shù)代碼分析Ent_int()intent_int(void){ g_ubIntNestCnt++; g_ubSysStat|=TSS_INDP;//TSS_INDP=4}Ret_int()voidret_int(void){ENTER_CRITICAL_SECTION;
/*thisfunctionwillneverbacktoitscaller*/POP_NULL;/*******************************************saveinterruptedtask'senvironment.**thisoperationreducessomeefficiency,because**theseregistersmaybepopedagainatonce.*******************************************/M_REG;
/*ifinterruptnestexists,exitret_intand*continuetohandlenestedinterrupt.*/if(--g_ubIntNestCnt){/*popthemonlyafteralittletime.*efficiencyisreduced*/M_REG;RETI;}/*changesystemstatusandcheckit*/g_ubSysStat&=~TSS_INDP;if(g_ubSysStat&(TSS_LOC|TSS_DDSP))gotonot_dispatch;/*checkdelayeddispatch*/if(!(g_blDelay&0x01))gotonot_dispatch;/*cleardelayeddispatchflag*/g_blDelay&=0x0;/*savecurrenttask'sstackpoint:g_pCurTsk->uwSP=sp*/SAVE_CURTSK_SP;/*showcurrenttaskwasinterruped*/g_pCurTsk->ubIntinfo|=0x01;/*changecurrenttask'sstatetojoinindisptaching*/g_pCurTsk->ubStatus|=TTS_RDY;
schedule();
not_dispatch:M_REG;//INT_RETI;//whileuse"RETI;"inc33RETI;}ASIXOS中用戶ISR的一般格式voidENT_INT_RTC(void) //int_vector_handler()函數(shù)調(diào)用{
ent_int();//告訴內(nèi)核,中斷發(fā)生了
rtc_isr();//用戶真正的中斷服務(wù)程序
ret_int();//我們要返回了,或者我們要切換任務(wù)了}設(shè)備驅(qū)動(dòng)設(shè)備驅(qū)動(dòng)設(shè)備驅(qū)動(dòng)是介于底層硬件與操作系統(tǒng)之間的一層軟件設(shè)備驅(qū)動(dòng)對(duì)上(也就是操作系統(tǒng))提供一個(gè)統(tǒng)一的服務(wù)接口,使得操作系統(tǒng)以及應(yīng)用程序可以通過(guò)這個(gè)接口訪問(wèn)底層的硬件設(shè)備設(shè)備驅(qū)動(dòng)對(duì)下要管理具體的硬件設(shè)備,包括設(shè)備的初始化、與設(shè)備相關(guān)的中斷處理、設(shè)備數(shù)據(jù)的讀寫(xiě)操作以及與此相關(guān)的緩沖區(qū)管理總之,設(shè)備驅(qū)動(dòng)程序的主要功能就是屏蔽硬件控制的具體細(xì)節(jié),對(duì)操作系統(tǒng)提供一個(gè)抽象的、統(tǒng)一的硬件資源訪問(wèn)接口BootloaderBootLoader是一段固化在嵌入式系統(tǒng)目標(biāo)系統(tǒng)ROM中的一段程序,它的主要作用就是引導(dǎo)操作系統(tǒng)如果是在調(diào)試階段,操作系統(tǒng)映象(Image)還沒(méi)有燒錄在目標(biāo)系統(tǒng)的ROM中,這時(shí)就需要BootLoader在系統(tǒng)上電后初始化某個(gè)特定的通信端口,比如串口、網(wǎng)口、并口或者是USB接口等等,通過(guò)這個(gè)通信端口從調(diào)試主機(jī)下載編譯好的操作系統(tǒng)映象,并將控制權(quán)交給操作系統(tǒng)目前開(kāi)源BootLoader中比較有代表性的是UBOOT,全稱UniversalBootLoader,是由德國(guó)DENX小組的開(kāi)發(fā),并遵循GPL條款的開(kāi)放源碼項(xiàng)目BootStrapBootStrap其實(shí)也是一段固化在處理器內(nèi)部ROM之中的一段代碼。用戶可以通過(guò)片外的管腳配置是否啟動(dòng)BootStrap,如果用戶選擇啟動(dòng)BootStrap,那么在系統(tǒng)上電復(fù)位時(shí),固化在片上ROM中的代碼將獲得控制權(quán),這段代碼將初始化片內(nèi)的一些硬件設(shè)備,比如外部存儲(chǔ)器接口控制器,通信接口等等在完成這些初始化后,BootStrap將通過(guò)這個(gè)通信接口等待調(diào)試主機(jī)發(fā)送來(lái)的命令,這些命令包括從調(diào)試主機(jī)下載一段映象到外部存儲(chǔ)器的某個(gè)特定地址,或者是將外部存儲(chǔ)器的內(nèi)容通過(guò)通信接口上傳到調(diào)試主機(jī),從外部存儲(chǔ)器的某個(gè)地址開(kāi)始運(yùn)行等等BootStrapBSP(BoardSupportPackage)BSP也是一段固化在嵌入式系統(tǒng)目標(biāo)系統(tǒng)ROM中的一段程序,BSP在系統(tǒng)上電的時(shí)候?qū)⒔庸芟到y(tǒng),完成必要板級(jí)硬件系統(tǒng)的自檢與初始化工作,并負(fù)責(zé)完成操作系統(tǒng)的引導(dǎo)如果在調(diào)試階段,BSP還將與調(diào)試主機(jī)上運(yùn)行的調(diào)試器進(jìn)行通信,完成調(diào)試功能。BSP與BootLoader不同的地方是除了上述的功能外,一般BSP還會(huì)提供一些板級(jí)硬件設(shè)備的基本輸入輸出操作的例程設(shè)備驅(qū)動(dòng)程序可以通過(guò)調(diào)用這些最底層的操作函數(shù)來(lái)完成對(duì)硬件系統(tǒng)的控制設(shè)備驅(qū)動(dòng)、BootLoader、BSP三者之間的關(guān)系BootLoader和BSP系統(tǒng)上電后的硬件自檢硬件系統(tǒng)的初始化引導(dǎo)操作系統(tǒng)支持與調(diào)試器的通信,并提供底層調(diào)試支持提供板級(jí)硬件系統(tǒng)的基本IO操作服務(wù),為驅(qū)動(dòng)程序提供底層支持設(shè)備的組成所謂外圍硬件設(shè)備是指在一個(gè)計(jì)算機(jī)系統(tǒng)中除了主處理器(CPU)和主存儲(chǔ)器外的其他硬件,比如鍵盤(pán)、顯示器、磁盤(pán)系統(tǒng)等等。一般而言,一個(gè)設(shè)備可以分為三個(gè)部分:控制器、驅(qū)動(dòng)器以及具體的硬件??刂破髫?fù)責(zé)接收CPU的命令以及將硬件設(shè)備的狀態(tài)或是數(shù)據(jù)傳給CPU,另外控制器還將根據(jù)CPU的配置命令產(chǎn)生正確的控制時(shí)序驅(qū)動(dòng)器根據(jù)控制器所產(chǎn)生的控制時(shí)序生成驅(qū)動(dòng)硬件系統(tǒng)工作的電壓和電流硬件系統(tǒng)將在驅(qū)動(dòng)器生成的驅(qū)動(dòng)電壓或電流的控制器下完成相應(yīng)的工作典型硬件設(shè)備的組成框圖設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序?qū)ι咸峁┮粋€(gè)統(tǒng)一的服務(wù)接口。這樣非常便于操作系統(tǒng)統(tǒng)一管理所有的外圍硬件設(shè)備。現(xiàn)代操作系統(tǒng)往往采用文件的形式對(duì)設(shè)備進(jìn)行封裝雖然現(xiàn)在的計(jì)算機(jī)系統(tǒng)的外圍設(shè)備千差萬(wàn)別,但是很多操作系統(tǒng)依然延續(xù)了這個(gè)抽象方法,比如Linux將設(shè)備分為字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備三大類(lèi),對(duì)于一些特殊的設(shè)備采用特殊的方法進(jìn)行管理,比如Linux上將屏幕抽象為Framebuffer進(jìn)行管理等等。嵌入式系統(tǒng)的外圍設(shè)備隨著應(yīng)用的不同而不同,對(duì)設(shè)備的管理也有多種方法,但總的來(lái)說(shuō),設(shè)備驅(qū)動(dòng)可以分為四個(gè)部分:設(shè)備文件接口、硬件管理、緩沖區(qū)管理和中斷處理程序。設(shè)備驅(qū)動(dòng)可以分為四個(gè)部分設(shè)備文件接口設(shè)備文件接口是設(shè)備驅(qū)動(dòng)與操作系統(tǒng)的接口備也可
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度物流企業(yè)人才培訓(xùn)承包協(xié)議4篇
- 二零二五年度美縫行業(yè)綠色生產(chǎn)合同協(xié)議4篇
- 2025年度航空航天結(jié)構(gòu)件模具開(kāi)模及加工服務(wù)協(xié)議4篇
- 二零二五年度二零二五苗木新品種研發(fā)與推廣合同4篇
- 二零二五年度生態(tài)城市綠化規(guī)劃與實(shí)施合同4篇
- 二零二五年度體育場(chǎng)館建設(shè)項(xiàng)目承包合同建設(shè)規(guī)范與賽事服務(wù)4篇
- 2025年度個(gè)人房產(chǎn)租賃擔(dān)保協(xié)議范本8篇
- 2025年度害蟲(chóng)防治項(xiàng)目規(guī)劃設(shè)計(jì)合同4篇
- 2025年木材產(chǎn)品運(yùn)輸及生態(tài)保護(hù)協(xié)議3篇
- 二零二五年度文化交流慈善捐贈(zèng)合作協(xié)議樣本4篇
- 微信小程序運(yùn)營(yíng)方案課件
- 抖音品牌視覺(jué)識(shí)別手冊(cè)
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動(dòng)學(xué)研究
- 安全施工專項(xiàng)方案報(bào)審表
- 學(xué)習(xí)解讀2022年新制定的《市場(chǎng)主體登記管理?xiàng)l例實(shí)施細(xì)則》PPT匯報(bào)演示
- 好氧廢水系統(tǒng)調(diào)試、驗(yàn)收、運(yùn)行、維護(hù)手冊(cè)
- 中石化ERP系統(tǒng)操作手冊(cè)
- 五年級(jí)上冊(cè)口算+脫式計(jì)算+豎式計(jì)算+方程
- 氣體管道安全管理規(guī)程
- 《眼科學(xué)》題庫(kù)
- 交通燈控制系統(tǒng)設(shè)計(jì)論文
評(píng)論
0/150
提交評(píng)論