<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 中斷代碼結構比較之WinCE4.2 VS WinCE5.0

中斷代碼結構比較之WinCE4.2 VS WinCE5.0

作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò ) 收藏
現在項目要從wince4.2下port到wince5.0下,今天將sd卡的驅動(dòng)加到wince5下。用的是現有的也就是wince4.2下的驅動(dòng)程序,幾個(gè)dll文件:SDBusDriver.dll;SDCSDCard.dll;SDMemory.dll。這個(gè)工作主要就是將相應的中斷加上就好了。
下面進(jìn)入正題。4.2下的中斷:InterruptInitialize(具體的驅動(dòng)中注冊中斷與事件)->SC_InterruptInitialize(系統的函數,可以根據privatewinceoscoreosnkkernelkwin32.c中的const PFNVOID Win32Methods[]數組得知這是一個(gè)系統函數。這一步為猜測,該函數在privatewinceoscoreosnkkernelintrapi.c中實(shí)現。enable中斷-通過(guò)調用下面的函數,之后將相應的事件放入中斷事件隊列)->DoInterruptEnable(在privatewinceoscoreosnkkernelintrapi.c中實(shí)現,先調用pfnOEMTranslateSysIntr映射一下,不過(guò)我沒(méi)有找到這個(gè)函數指針的原型。之后才是OEMInterruptEnable)->OEMInterruptEnable(在platformxxxkernelhalcfw.c中,地球人都知道。在這個(gè)文件中有個(gè)static void OEMInitInterrupts(void),是在oeminit中被調用的,差點(diǎn)被忽悠了。)這只是enable(也包含初始化),相應的disable和done也在相應的文件中實(shí)現??赡苡?.2用多了,感覺(jué)這些中斷的處理一氣呵成,很容易理解,就是修改或者增加比較麻煩。要分別處理OEMInterruptXXX中相應的各個(gè)中斷。
5.0下的中斷:感覺(jué)上就一個(gè)字“亂”,主要是這些代碼分別放在不同的地方,或許這樣更合理化吧,誰(shuí)知道MS怎么想的。主要分布在以下幾個(gè)地方:(A1)platformcommonsrccommonintr;(A2)platformcommonsrcxxx(type of cpu)yyy(intel or samsung or ...)zzzintr;(A3)platformzzzsrckerneloalintr.c。
5.0下中斷初始化流程:從時(shí)間上來(lái)看先是OEMInit(oalinit.c)->OALIntrInit(A2中實(shí)現)->BSPIntrInit(A3中實(shí)現,這個(gè)地方比較關(guān)鍵了,因為要添加或修改中斷就要在這里來(lái)做,主要實(shí)現SYSINTR_XXX與IRQ_XXX的映射)。OK中斷初始化完畢。
5.0下中斷的enable流程:在5.0下面沒(méi)有找到SC_InterruptInitialize,或者類(lèi)似的實(shí)現,不過(guò)我想5.0下面的應該和4.2下面的一樣。由驅動(dòng)的InterruptInitialize最終調用到OEMInterruptEnable(在A(yíng)1commonoem.c中實(shí)現)->OALIntrEnableIrqs(在A(yíng)3中實(shí)現)->BSPIntrEnableIrq(在A(yíng)3中實(shí)現)。至此enable完成。對應的disbale和done也是在相應的文件中實(shí)現。
從名字上也可以看出來(lái)A1提供了一個(gè)對內核開(kāi)放的中斷層,由它再去調用對應的oal層的代碼A2,A2再在其中調用A3中的代碼;則A3中最主要的就是提供一個(gè)給程序員注冊的一個(gè)接口BSPIntrInit。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>