阅读:1493回复:3
串口问题,一个驱动要支持多个物理串口。
小弟现在在搞串口驱动,本来是很简单的东西,但是对wince不是很精通,所以问几个问题。
ARM926的SOC上面,出了4个串口,uart0作为调试串口,打印调试信息的,用的都是查询方式。 现在要支持uart1~uart3,当然不再做调试串口,而是可能接写GPS模块之类的东西。 现在遇到的问题就是: 1、一个驱动要支持3个串口,初始化的时候我把3个串口硬件都初始化了。这样感觉不妥,毕竟还没有一定都使用所有串口。问题就是,如何知道当createfile时,传入的是串口号? 2、如果以上实现不了,只能将每个串口都写一个驱动,那样显得很冗余,虽然也是正确的。 |
|
沙发#
发布于:2007-11-16 13:33
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial1]
"DeviceArrayIndex"=dword:0 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial2] "DeviceArrayIndex"=dword:1 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial3] "DeviceArrayIndex"=dword:2 利用这个注册表项,在实现 CSerialPDD * CreateSerialObject(LPTSTR lpActivePath, PVOID pMdd,PHWOBJ pHwObj, DWORD DeviceArrayIndex) { CSerialPDD * pSerialPDD = NULL; switch (DeviceArrayIndex) { case 0: pSerialPDD = new CPddSerial1(lpActivePath,pMdd, pHwObj); break; case 1: pSerialPDD = new CPddSerial2(lpActivePath,pMdd, pHwObj); break; case 2: pSerialPDD = new CPddSerial3(lpActivePath,pMdd, pHwObj); break; } if (pSerialPDD && !pSerialPDD->Init()) { delete pSerialPDD; pSerialPDD = NULL; } return pSerialPDD; } 这些类都继承自CSerialPDD,你接下来就是重载Init()等需要分别实现的虚函数,这样你的三个串口都可以用这个驱动DLL。 |
|
板凳#
发布于:2007-11-16 14:25
多谢大侠指点,我再研究一下。
一定要用微软的MDD和PDD吗?我可否简单的就一个驱动,然后上层直接用createfile的方式调用? |
|
地板#
发布于:2007-11-25 21:21
PDD与MDD只是微软把与硬件无关的代码做了一个抽象,从而减少程序开发的难度,
本质上并没有什么区别. |
|
|