WinCE下对硬件访问的方法

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

HAL能够对硬件访问这是显而易见的,下面说一下应用程序和驱动程序对硬件的访问方法

应用程序和驱动程序对硬件的访问有两种,一种是在用户态,使用VirtualAlloc和VirtualCopy,这两个函数原型为

LPVOID VirtualAlloc(

LPVOID lpAddress,

DWORD dwSize,

DWORD flAllocationType,

DWORD flProtect

);

BOOL VirtualCopy(

LPVOID lpvDest,

LPVOID lpvSrc,

DWORD cbSize,

DWORD fdwProtect

);

首先通过VirtualAlloc来获得一段虚拟地址空间的分配,然后VirtualCopy可以将一个虚拟地址绑定到一个物理地址上,从而实现对物理硬件的访问。

这一直是我以为唯一的访问硬件的方法,可是今天看一段源代码的时候,发现了另外一种--IST

IST是运行于内核态的中断处理线程,所以他与内核使用相同的线形虚拟空间,可以非常方便的映射到相应的物理地址。

能够访问硬件的线程是只能由驱动程序创建的,这主要是线程跟创建该线程的进程是共享同一虚拟地址空间的,如果有应用程序创建,它就是与应用程序使用同一空间,很明显访问不到硬件的地址,而驱动程序是被内核初始化,是与内核使用同一空间,因此,它创建的线程就可以直接访问硬件。

很明显,主要是由驱动程序创建的线程,都可以访问到硬件,而不管是不是中断服务线程。如果要做中断服务,该线程就应该与一个相应中断时间挂钩。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航