应用程序如何调用OEMWriteDebugLED()?

lastone621 2011-08-27 09:03:27
对驱动完全不了解~由于要应用程序中控制LED灯,在驱动中找到了这么几个函数~
BSP的EBoot文件夹,loader.h中,
void OEMWriteDebugLED(WORD wIndex,DWORD dwPattern);

main.c文件中

void main(void)
{
//Clear LEDs.
//
OEMWriteDebugLED(0,0x3F);

//BootloaderMain();

//SpinForever();
}

我试着把main函数中OEMWriteDebugLED中的参数改变,发现启动时LED灯的确改变了~~
问题是这是在驱动内调用,如果是在应用程序中该如何调用,求教~~


以及,我在dbgapi.h中找到了一个WriteDebugLED()函数,可以在应用程序中直接调用,但是似乎没有作用~而且这个只能找到定义~


BSP的Stepldr文件夹,utils.c中有个函数

void Led_Display(int data)
{
//Active is low.(LED on)
//GPE3 GPE2 GPE1 GPE0
//nLED_8 nLED_4 nLED_2 nLED_1
//
rGPBDAT = (rGPEDATA & ~(0xf<<0)) | ((~data & 0xf) <<0);
}

这个函数跟OEMWriteDebugLED()又有什么关系?
...全文
148 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gooogleman 2011-08-29
  • 打赏
  • 举报
回复
这个是内核调用的,不是你驱动去调用的。
楼主想用来干啥,不必拘泥与函数,自己写个驱动也可以啊
cecwxf 2011-08-29
  • 打赏
  • 举报
回复
用一个简单的流驱动去控制
猫xiaowai 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lastone621 的回复:]

引用 3 楼 northcan 的回复:

我觉得
1 用KernelIOControl更好
不过应该要自己去加一个IO控制码,如IO_WRITE_LED

2 应该可以写一个最简单的流驱动
应用程序通过这个流驱动间接调用OEMWriteDebugLED

关键是KernelIOControl我不知道怎么在引用程序中使用~~控制码的话好像有现成的LED控制~~就是调用的OEMW……
[/Quote]
1、楼主最好找本书或帖子仔细看看什么是流驱动,以及实现方法。对于IO控制来说,相应的流驱动实现并不是很复杂。
2、应用可以直接调用KernelIoControl的,但你要在KernelIoControl函数里面加一个自定义的IOCTL。调用的时候KernelIoControl的第一个参数就是你定义的这个IOCTL。函数原型如下:
BOOL KernelIoControl(
  DWORD dwIoControlCode,
  LPVOID lpInBuf,
  DWORD nInBufSize,
  LPVOID lpOutBuf,
  DWORD nOutBufSize,
  LPDWORD lpBytesReturned
);
猫xiaowai 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lastone621 的回复:]

引用 2 楼 chenxwzcc 的回复:

既然驱动中可以调用,那就把这个函数再封装成DLL,然后应用程序调用这个DLL就可以了。。

只能找到这个声明而已~~没找到实现函数~
[/Quote]
在你的函数里只要做一件事就够了,直接调用OEMWriteDebugLED()并返回,不需要找到实现函数的。然后你的应用直接用的新写的那个函数。
lastone621 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 northcan 的回复:]

我觉得
1 用KernelIOControl更好
不过应该要自己去加一个IO控制码,如IO_WRITE_LED

2 应该可以写一个最简单的流驱动
应用程序通过这个流驱动间接调用OEMWriteDebugLED
[/Quote]
关键是KernelIOControl我不知道怎么在引用程序中使用~~控制码的话好像有现成的LED控制~~就是调用的OEMWriteDebugLED~
const PFNVOID Win32ExtMethods[] = {
...............
(PFNVOID)OEMWriteDebugLED, // 67 - WriteDebugLED
...............
}

流驱动的话~~我对驱动的了解仅限于知道有本地驱动和流驱动这么个分类~
lastone621 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenxwzcc 的回复:]

既然驱动中可以调用,那就把这个函数再封装成DLL,然后应用程序调用这个DLL就可以了。。
[/Quote]
只能找到这个声明而已~~没找到实现函数~
northcan 2011-08-28
  • 打赏
  • 举报
回复
我觉得
1 用KernelIOControl更好
不过应该要自己去加一个IO控制码,如IO_WRITE_LED

2 应该可以写一个最简单的流驱动
应用程序通过这个流驱动间接调用OEMWriteDebugLED
猫xiaowai 2011-08-28
  • 打赏
  • 举报
回复
既然驱动中可以调用,那就把这个函数再封装成DLL,然后应用程序调用这个DLL就可以了。。
lastone621 2011-08-27
  • 打赏
  • 举报
回复
以及 我看到说这种调用似乎是要借助于KernelIOControl函数,但这个函数似乎也是BSP的一部分,应用程序怎么去直接使用它>

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧