在应用程序和驱动通信中应该注意的问题
2008-12-24 17:09
302 查看
作者:wogoyixikexie@gliet
刚才论坛有位兄台应用和驱动通信不成功,我帮他解决了问题,现在写入博客,造福you and me
==========================================================================
各位大侠:
小弟在WinCE系统中添加了自己写的LED灯的驱动程序,并写了一个MFC程序测试之。却发现存在一些问题。CreateFile成功,但是灯却没有亮,下面的部分代码,大哥大姐们帮忙了。
static AT91PS_PIO g_pPIOB;
static AT91PS_PMC g_pPMC;
BOOL Addr_Init()
{
BOOL bRet = TRUE;
PHYSICAL_ADDRESS PhysAddrPiob;
PHYSICAL_ADDRESS PhysAddrPmc;
PhysAddrPiob.LowPart = (DWORD) AT91C_BASE_PIOB;
PhysAddrPiob.HighPart = 0;
g_pPIOB = (AT91PS_PIO) MmMapIoSpace(PhysAddrPiob,sizeof(AT91S_PIO),FALSE);
if (g_pPIOB == NULL)
{
RETAILMSG(1,(L"Failed to remap the PIO registrers/r/n"));
bRet = FALSE;
}
PhysAddrPmc.LowPart = (DWORD) AT91C_BASE_PMC;
PhysAddrPmc.HighPart = 0;
g_pPMC = (AT91PS_PMC) MmMapIoSpace(PhysAddrPmc,sizeof(AT91S_PMC),FALSE);
if (g_pPMC == NULL)
{
RETAILMSG(1,(L" Failed to remap the PMC registrers/r/n"));
bRet = FALSE;
}
return bRet;
}
BOOL WINAPI DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls((HMODULE)hInstDll);
break;
case DLL_PROCESS_DETACH:
break;
}
return 1;
}
DWORD LES_Init(DWORD dwContext)
{
Addr_Init();
g_pPMC->PMC_PCER = 1 < <3;
return 1;
}
DWORD LES_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
g_pPIOB->PIO_PER = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
g_pPIOB->PIO_OER = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
g_pPIOB->PIO_CODR = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
return 1;
}
应用程序中打开驱动的函数如下:
void CLedsDlg::OnOpen()
{
// TODO: Add your control notification handler code here
hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile == NULL)
{
MessageBox(_T("不能打开LES"));
}
else
{
MessageBox(_T("打开LES成功"));
}
}
我设置LED灯的驱动程序在生成系统镜像的时候就进行了编译,且编译进内核,因此只需打开驱动就可以使用了吧、
现在用到的程序代码主要就这些了。各位大哥帮忙看看是什么地方出问题了。
谢,急等
===================================================================================
引用 9 楼 gooogleman 的回复:
void CLedsDlg::OnOpen()
{
// TODO: Add your control notification handler code here
hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile == NULL)
{
MessageBox(_T("不能打开LES"));
}
else
{
MessageBox(_T("打开LES成功"));
}
}
——————貌似TEXT("LES:")应该为TEXT("LES1:"),,你改动试试。我看很多例子都是后面带个数字
还有LES_Open中加入打印信息,看是否被应用调用了。
哈哈,我也是碰巧。一起学习。
————————————————————————————————————
引用 11 楼 qiu__zhi2008 的回复:
非常感谢gooogleman哥哥,正如你所说的,hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); 中LES后面必须带上索引号,否则的话是不行的,
希望看过本帖子的初学者可以引以为鉴,
感动的要哭了,
谢谢
结贴
不用......
转载请标明:作者wogoyixikexie@gliet.桂林电子科技大学一系科协,原文地址:http://blog.csdn.net/gooogleman——如有错误,希望能够留言指出;如果你有更加好的方法,也请在博客后面留言,我会感激你的批评和分享。
刚才论坛有位兄台应用和驱动通信不成功,我帮他解决了问题,现在写入博客,造福you and me
==========================================================================
各位大侠:
小弟在WinCE系统中添加了自己写的LED灯的驱动程序,并写了一个MFC程序测试之。却发现存在一些问题。CreateFile成功,但是灯却没有亮,下面的部分代码,大哥大姐们帮忙了。
static AT91PS_PIO g_pPIOB;
static AT91PS_PMC g_pPMC;
BOOL Addr_Init()
{
BOOL bRet = TRUE;
PHYSICAL_ADDRESS PhysAddrPiob;
PHYSICAL_ADDRESS PhysAddrPmc;
PhysAddrPiob.LowPart = (DWORD) AT91C_BASE_PIOB;
PhysAddrPiob.HighPart = 0;
g_pPIOB = (AT91PS_PIO) MmMapIoSpace(PhysAddrPiob,sizeof(AT91S_PIO),FALSE);
if (g_pPIOB == NULL)
{
RETAILMSG(1,(L"Failed to remap the PIO registrers/r/n"));
bRet = FALSE;
}
PhysAddrPmc.LowPart = (DWORD) AT91C_BASE_PMC;
PhysAddrPmc.HighPart = 0;
g_pPMC = (AT91PS_PMC) MmMapIoSpace(PhysAddrPmc,sizeof(AT91S_PMC),FALSE);
if (g_pPMC == NULL)
{
RETAILMSG(1,(L" Failed to remap the PMC registrers/r/n"));
bRet = FALSE;
}
return bRet;
}
BOOL WINAPI DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls((HMODULE)hInstDll);
break;
case DLL_PROCESS_DETACH:
break;
}
return 1;
}
DWORD LES_Init(DWORD dwContext)
{
Addr_Init();
g_pPMC->PMC_PCER = 1 < <3;
return 1;
}
DWORD LES_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
g_pPIOB->PIO_PER = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
g_pPIOB->PIO_OER = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
g_pPIOB->PIO_CODR = (1 < <11) |(1 < <16) |(1 < <17) |(1 < <18);
return 1;
}
应用程序中打开驱动的函数如下:
void CLedsDlg::OnOpen()
{
// TODO: Add your control notification handler code here
hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile == NULL)
{
MessageBox(_T("不能打开LES"));
}
else
{
MessageBox(_T("打开LES成功"));
}
}
我设置LED灯的驱动程序在生成系统镜像的时候就进行了编译,且编译进内核,因此只需打开驱动就可以使用了吧、
现在用到的程序代码主要就这些了。各位大哥帮忙看看是什么地方出问题了。
谢,急等
===================================================================================
引用 9 楼 gooogleman 的回复:
void CLedsDlg::OnOpen()
{
// TODO: Add your control notification handler code here
hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile == NULL)
{
MessageBox(_T("不能打开LES"));
}
else
{
MessageBox(_T("打开LES成功"));
}
}
——————貌似TEXT("LES:")应该为TEXT("LES1:"),,你改动试试。我看很多例子都是后面带个数字
还有LES_Open中加入打印信息,看是否被应用调用了。
哈哈,我也是碰巧。一起学习。
————————————————————————————————————
引用 11 楼 qiu__zhi2008 的回复:
非常感谢gooogleman哥哥,正如你所说的,hFile = CreateFile(TEXT("LES:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); 中LES后面必须带上索引号,否则的话是不行的,
希望看过本帖子的初学者可以引以为鉴,
感动的要哭了,
谢谢
结贴
不用......
转载请标明:作者wogoyixikexie@gliet.桂林电子科技大学一系科协,原文地址:http://blog.csdn.net/gooogleman——如有错误,希望能够留言指出;如果你有更加好的方法,也请在博客后面留言,我会感激你的批评和分享。
相关文章推荐
- 在应用程序和驱动通信中应该注意的问题
- 初学网络通信编程时应该注意的常见问题
- 透明加密驱动写文件HEAD应该注意的问题
- 使用驱动调试助手应该注意的问题
- Struts2 - 属性驱动与模型驱动 中应该注意的问题。
- Java与C通信要注意的几个问题
- 做多文件/图片上传应该注意的几个前后端问题
- Java与C通信要注意的几个问题
- Android开发中使用static变量应该注意的问题
- 接口回调应该注意的问题
- springcache使用笔记003_注释驱动的 Spring cache 基本原理,注意和限制,@CacheEvict 的可靠性问题
- cvs服务器在redhat 9.0上的建立以及应该注意的问题
- 关于发邮件的问题 JavaEE 5和 J2EE 1.4应该注意的问题
- 报表工具QlikView选型应该注意的问题
- 一个类在另一个类中以集合形式声明为属性时应该注意的问题
- 关于设计表时应该注意的问题
- Ubuntu 14.04安装搜狗拼音linux版应该注意的问题
- jdbc中preparestatement操作数据库几个应该注意的问题
- win7下安装tensorflow应该注意的问题
- Java Socket 通信中传递Object对象注意的问题