WinCE下对硬件访问的方法

类别:软件工程 点击:0 评论:0 推荐:

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

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

本文地址:http://com.8s8s.com/it/it32881.htm