(1)在wince下能夠直接訪問的都是虛擬位址,不能直接訪問gpio埠,因此我們首先需要將gpio口的物理位址對映到虛擬位址上來。在普通的應用程式或者驅動中訪問記憶體,還要再用virtuaalloc+virtualcopy做乙個核心到當前程序的二次對映(有一種情況例外,就是你的os被配置成full kernel mode,這時任何應用程式都可以訪問os核心位址).
virtualalloc用於在當前程序的虛擬位址空間中保留或者提交空間,在保留時以64kb為單位,提交時以4kb為單位。其函式原型為
lpvoid virtualalloc(
lpvoid lpaddress, // 分配虛擬位址的起始指標
dword dwsize, // 大小,以位元組為單位
dword flallocationtype, // 型別,設為mem_reserve
dword flprotect // 訪問保護,設為page_noaccess
);
bool virtualcopy(
lpvoid lpvdest, // 虛擬目的位址指標,接受virtualalloc的返回值
lpvoid lpvsrc, // 源實體地址指標
dword cbsize, // 大小必須與虛擬位址相同
dword fdwprotect // 訪問保護型別
);
(2)keybd_event(vk_down,0x27, keyeventf_keyup, 0); vk_down為虛擬鍵值詳見msdn中的keybd_event解釋,keyeventf_keyup指定則按鍵釋放,不指定則按鍵按下狀態
(3)pdisk是物理上的盤,而hdisk是平時使用的邏輯盤
(4)loadlibrary載入動態連線庫為使用庫裡面強大的整合功能,如hmcore = (hmodule) loadlibrary(_t("coredll.dll"));
(6)waitformultipleobjects引數依次:控制代碼陣列個數, 控制代碼陣列指標,等待型別,等待時間,如ret = waitformultipleobjects(9, greadkeyevent, false, infinite);
(7)程式包含stdio.h,stdlib.h標頭檔案,則程式會去連線coredll.dll;在wince系統中該庫非常重要,我們呼叫system api時都不是直接呼叫的,而是先轉到coredll.dll,由它幫我們去呼叫system api的。coredll.dll
提供核心的一些功能,其中的函式或變數供我們在驅動中使用。
(8)wince 5之前都是靜態中斷,從ce 5開始中斷申請分為動態申請和靜態分配2種;樓主用的kerneliocontrol+ioctl_hal_request_sysintr就是動態申請的方法;靜態分配其實很簡單,在oeminterrupthandler裡直接switch case即可;具體實現很多,各家bsp不一樣,但是道理都是如此;其實,動態申請就是由系統維護乙個table,使得oem允許其他廠商的驅動以安裝的形式動態加到這個table裡。作為oem自己,其實維護乙個靜態的中斷分配就可以了,驅動完全不用動態申請。只不過很多參考bsp用了這個形式,導致大家都在動態申請。(中斷設計的標頭檔案:在oalintr.h中新增中斷的巨集定義,然後在cfw.c中新增初始化,在armint.c中新增isr程式,處理中斷發生後返回定義的中斷號)
未完,待續……
各種插入函式收集整理
插入排序 void insertsort int arr,int length 無哨兵的插入排序 arr j 1 temp void insertsort int arr,int length 有哨兵的插入排序 arr j 1 arr 0 希爾排序 void shell sort int arr,i...
Git常用操作命令收集 整理
git常用操作命令收集 檢出倉庫 gitclonegit git 檢視遠端倉庫 gitremote v 新增遠端倉庫 gitremote add name url 刪除遠端倉庫 gitremote rm name 修改遠端倉庫 gitremote set url push name newurl 拉...
各種常用的css樣式(收集整理)
a a標籤去掉下劃線 a 滑鼠手型樣式 li 列表樣式 無。li標籤去掉點 em 去掉em標籤斜體樣式,初始化 用a標籤實現跳轉到本頁面或者目標頁面的頂部 底部或者某一位置 1 定義目標位置,賦予id。2 給a標籤新增href為 id。文字兩端對齊 text align justify 偽元素選擇器...