介绍几种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件
2011-02-27 23:53
543 查看
介绍几种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
//------------------------------------------------------------------------------------------------------------------------------// Topic:介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
// 作者:gooogleman(wogoyixikexie@gliet)
// 论坛账号:gooogleman (经常在CSDN出没)
// 版权:桂林电子科技大学一系科协gooogleman(wogoyixikexie@gliet)
// 平台:wince5.0.0 OK2440-III 5.0 BSP
// 发布日期:2010-06-09
// 最后修改:
// 注意事项:未经作者同意,商业网站不能转载,并且不得在转载的时候擅自修改、删除文章的任何部分
//------------------------------------------------------------------------------------------------------------------------------
直接在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的原因,不管咋的,调试起来方便。
二、wince6.0
关于wince6.0 我接触的不算多,因为我公司一直用很落后的2440 ,现在才开始慢慢使用三星的A8 S5pc100,不过刚毕业的那阵子很有激情,自己从头到尾的把2440 5.0 BSP弄到wince6.0 上,效果还不错。刚开始的时候大家都一致认为wince6.0 已经不能在应用程序中直接访问硬件了,后来sunrain_hjb老兄发了博客,证实VirtualCopyEX还是照样可以做到,我暂时还没有时间做验证,不过sunrain_hjb 老师(还是叫老师吧,因为他的确是我们wince驱动的良师益友,尽管没有见过面。)的博客很有分量的,值得信赖,下面是他的博客地址/article/4741301.html 大家可以一起去学习,sunrain_hjb 老师更新的蛮快,并且一旦发博,都是经典。
三、wince7.0
最近在CSDN wince板块,一些走在前沿的老兄,已经开始探讨wince7.0 ,据说已经比wince6.0 改变很多,让我们这些wincer 对android的恐惧感减缓一些。嘿嘿,等过阵子移植wince7.0 到OK6410/REAL6410 上试试,wince6.0 的安装的复杂性,让我很不爽。不懂他如何直接访问硬件的了,到时候玩过再完善这篇博客了。This is it!
转载请标明:作者wogoyixikexie@gliet(gooogleman)桂林电子科技大学一系科协(博客http://blog.csdn.net/gooogleman、http://www.cnblogs.com/gooogleman/)如有错误,或者你有更加好的方法请在博客文章后留言指出,gooogleman会感激你的批评和分享。
相关文章推荐
- 介绍几种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
- 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
- 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooogleman)
- 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件
- Android 驱动之旅 第四章:在Android 系统中编写JNI 方法在应用程序框架层提供Java 接口访问硬件
- wince 驱动的一些 调试方法
- 在WinCE下,应用程序直接读/写/擦除flash设备的方法
- WinCE下直接启动自己应用程序的方法
- CE6.0用户态驱动和应用程序访问物理内存的方法
- 在WinCE下,应用程序直接读/写/擦除flash设备的方法
- 介绍一种wince 6.0 如何添加 640*480液晶驱动的好方法
- 内核子系统或设备驱动可以直接编译到内核,也可以编译成模块,如果编译到内核,可以使用前一节介绍的方法通过内核启动参数来向它们传递参数,如果编译成模块,则可以通过命令行在插入模块时传递参数,或者在运行时,
- Nginx下禁止ip直接访问的几种方法
- Wince下面添加应用程序,并且自动运行----几种方式介绍
- WinCE下直接启动自己应用程序的方法
- 关于隐藏Windows任务栏中的应用程序按钮的几种方法的介绍
- 在WinCE下,应用程序直接读/写/擦除flash设备的方法
- wince驱动异常调试方法(作者:wogoyixikexie@gliet)
- 下面我会介绍几种轻轻松松访问Google的方法
- WINCE下调试驱动的一般方法