X
平台系統時鐘中斷的處理工作 系統時鐘由InitClock函數負責初始化工作
一般是在OEMInit函數中調用
當發生中斷時
ISR首先用下列語句累計計數
CurMSec += SYSTEM_TICK_MS; /////SYSTEM_TICK_MS =
然後根據下列語句判斷應該返回什麼值
if ((int) (dwReschedTime – CurMSec) >= )
return SYSINTR_RESCHED; ///重新調度
else
return SYSINTR_NOP; ///不再執行任何操作
上述代碼中全局變量dwReschedTime在schedulec中定義也就是由內核的調度模塊決定在何時開始重新調度線程CurMSec累計了從WindowsCE啟動到當前總共產生了多少個system tick實現系統時鐘後還要實現OEMIdle函數當沒有線程准備運行時OEMIdle被調用OEMIdle函數將CPU置於空閒模式但在空閒模式下仍然要累計系統時鐘
三I/O控制代碼
I/O控制代碼作用
應用軟件或者驅動程序可以調用KernelIoControl函數與OAL層通信而KernelIoControl在內部調用OEMIoControl函數OEMIoControl是一個OAL APIOEM可以在OEMIoControl中編寫自己的I/O控制代碼實現一些功能或者說與應用軟件通信I/O控制代碼常用的例子如重啟計算機得到系統信息設置RTC得到設備ID等還有一些系統程序使用的特殊的I/O控制代碼在這裡說明一下我經過實驗證實CE提供的得到設備ID方法並非有效
編寫自己的I/O控制代碼步驟
) 在pkfuncsh或者新編寫一個h文件中按如下格式定義
#define IOCTL_MY_CONTROL CTL_CODE(FILE_DEVICE_HAL METHOD_NEITHER FILE_ANY_ACCESS)
) 在oemioctlc中修改OEMIoControl函數添加如下代碼
case IOCTL_MY_CONTROL:
) 在應用程序中調用KernelIoControl函數具體參數參見幫助文檔
四結束語
OAL所有接口函數和全局變量說明請參見標題為Supported OAL APIs的幫助文檔以前的文章《加密Windows CE系統》裡介紹的 OEMLoadInit_t pOEMLoadInit 和 OEMLoadModule_t pOEMLoadModule 就是OAL暴露的用於創建可信任環境的全局變量我們編寫好了函數後就可以把函數地址賦給這兩個變量OAL的確很復雜當實際需要時我們才會具體研究某一部分因為帶著問題研究是最有效率的希望這兩篇文章能夠拋磚引玉讓更熟悉OAL的開發者能夠公開自己的研究成果和大家分享
[] [] []
From:http://tw.wingwit.com/Article/program/SQL/201311/16411.html