<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 中斷代碼結(jié)構(gòu)比較之WinCE4.2 VS WinCE5.0

          中斷代碼結(jié)構(gòu)比較之WinCE4.2 VS WinCE5.0

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();