none
wince中,什么函数(地方)实现物理地址 到 虚拟地址 的转换 RRS feed

  • 问题

  • 我有硬件(CPU 等)的Datasheet,  代码中能查到一些对虚拟地址(寄存器)的操作,

     

    请问,wince中,什么函数(地方)实现物理地址 到 虚拟地址 的转换?

     

     

    2008年9月27日 9:46

答案

  • 寄存器的地址应该是物理地址,一般的驱动中都是设定一个寄存器的基准地址,然后新建一个结构,将各个寄存器都添加到结构里,每项的类型都是UINT32,正好是4个字节一个寄存器的大小.地址递增规律和寄存器的是一样的,最后将设置的那个基准地址赋给这个结构,这样就可通过操作这个结构操作寄存器了.
    可通过下面的函数为一个物理地址申请虚拟地址.
    PVOID MmMapIoSpace( 
      PHYSICAL_ADDRESS PhysicalAddress, 
      ULONG NumberOfBytes, 
      BOOLEAN CacheEnable 
    );
     
    2008年9月27日 12:29

全部回复

  • 寄存器的地址应该是物理地址,一般的驱动中都是设定一个寄存器的基准地址,然后新建一个结构,将各个寄存器都添加到结构里,每项的类型都是UINT32,正好是4个字节一个寄存器的大小.地址递增规律和寄存器的是一样的,最后将设置的那个基准地址赋给这个结构,这样就可通过操作这个结构操作寄存器了.
    可通过下面的函数为一个物理地址申请虚拟地址.
    PVOID MmMapIoSpace( 
      PHYSICAL_ADDRESS PhysicalAddress, 
      ULONG NumberOfBytes, 
      BOOLEAN CacheEnable 
    );
     
    2008年9月27日 12:29
  •  

    谢谢 FrankLee1985 的回复.   1985年,好年轻呀, 年轻有为.
    2008年9月28日 1:48
  •  

    谢谢 FrankLee1985 的回复.   1985年,好年轻呀, 年轻有
    2008年12月5日 7:59