介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件

直接在wince下操作硬件可以避免烧写NK,避免繁琐的驱动调试,用来验证硬件好坏非常有用,是系统起来后调试外设的很好的手段,现在就来分析吧。   一、在wince5.0 平台   wince平台是比较成熟的平台,感觉驱动比较好调试,驱动和应用的写法可以一模一样的,甚至我们可以采用EVC来开发流驱动,我就试过用EVC开发一个流驱动到PDA上,目前已经投产,效果很不错。   在wince5.0 上直接访问硬件有如下方法:   1、直接访问uncached 虚拟地址,成功案例如下: //-GPB for LCD backlight control 0xB16000XX is uncached Address #define rGPBCON (*(volatile unsigned *)0xB1600010) //Port B control #define rGPBDAT (*(volatile unsigned *)0xB1600014) //Port B data #define rGPBUP (*(volatile unsigned *)0xB1600018) //Pull-up control B 下面的代码在EVC下成功 控制了背光。 // test is OK ---the backlight is controlled void CSPI_wifi_testDlg::OnButton3() {   // TODO: Add your control notification handler code here   // setting GPB1 out [3:2]=01   rGPBCON&=~(1<<3);   rGPBCON|=(1<<2);   rGPBDAT|=(1<<1); // backlight on   //rGPBDAT&=~(1<<1); // backlight off }   2、使用MmMapIoSpace以及MmUnmapIoSpace 访问   其实MmMapIoSpace以及MmUnmapIoSpace就是用VirtualAlloc和VirtualCopy实现的,以前我曾经写过一篇文章有详细介绍,地址   http://blog.csdn.net/gooogleman/archive/2009/08/11/4430858.aspx   MmMapIoSpace以及MmUnmapIoSpace成功访问硬件案例: void CDlgDemoDlg::OnButton1() 58 { 59   // TODO: Add your control notification handler code here 60   //unsigned char *gpio_base; 61   unsigned int *gpio_base; 62   OutputDebugString(L"TestDrv - LedDrive1/n"); 63   //PUCHAR ioPortBase; 64   PHYSICAL_ADDRESS PortAddress = {0x56000060, 0}; // LowPart=0x56000060;HighPart=0; 65   gpio_base =(unsigned int *)MmMapIoSpace( PortAddress, 0x04,FALSE ); // 获得内存,4字节大小。 66   *gpio_base = 0x0585ff87; // 直接访问硬件 67   MmUnmapIoSpace(gpio_base,0x04);//释放内存 68 }   3、用VirtualAlloc和VirtualCopy访问硬件   这个是大家最熟悉的了,因为几乎每一个驱动都有他们两个,嘿嘿,所以在这里不做介绍了,因为在wince5.0 如上的写法可以在驱动和应用中都直接使用,效果一样,嘿嘿,这就是我一直喜欢wince5.0的原因,不管咋的,调试起来方便。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooogleman/archive/2010/06/09/5658503.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值