阅读:1685回复:10
关于流驱动的一些问题
1.如果某个流驱动的作用是用中断来接受和发送数据的,一般来说创建中断线程的代码是应该放在XXX_Init中还是XXX_Open中呢
2.假设应用程序中分配一块缓冲区,调用ReadFile将这块缓冲区的指针传递给XXX_Read函数,XXX_Read是内容如下: XXX_Read(...) { ... //检查参数合法性 ... //设置各种初始环境 //进入中断,中断线程读取数据,并填充到传入的缓冲区地址 return //返回 } 如果XXX_Read函数在中断函数还未将所有数据读完的情况下就返回了,应用程序在操作缓冲区时和中断线程会不会发生冲突,有的话,应该如何解决。利用线程同步的机制,让XXX_Read函数在中断线程读完所有需要的数据再返回的方法可取吗? 3.流驱动接口能实现被多个应用程序调用吗?比如多个进程同时调用CreateFile,并通过该驱动与硬件设备通信。这种实现有什么需要注意的地方。 谢谢大家的指点^_^ |
|
沙发#
发布于:2007-07-30 10:35
1。个人觉得应该放在XXX_Init中,因为这个驱动是用中断来接受和发送数据,只要开机进系统后,就有中断来的可能。
2。要达人来说说。不过串口驱动的COM_Read能给你些答案 3。注意互斥。 请达人现身,关注中 |
|
|
板凳#
发布于:2007-07-31 09:28
谢谢楼上大侠指点
|
|
地板#
发布于:2007-08-02 10:24
顶一下,对于后两个问题希望得到更详细的阐述
谢谢各位大侠 |
|
地下室#
发布于:2007-08-02 10:33
可用使用hOpenContext参数来实现流驱动程序的单访问和多访问
|
|
5楼#
发布于:2007-08-02 10:35
也就是说要想实现多访问,对于XXX_Open函数来说,每次调用都应该返回不同的hOpencontext值。应该跟踪从XXX_open返回的哪一个值正在被使用。
|
|
6楼#
发布于:2007-08-02 10:50
2,你的XXX_Read函数内容我觉得有问题,你在读函数里怎么可能进入中断?,我觉得应该是在读函数里将中断已经读取的数据填充到应用程序传入的缓冲区地址,如果需要读到一定长度的数据才返回的话,需要驱动程序配合,在打开设备时置阻塞标志.
3,可是实现被多个应用程序打开. |
|
7楼#
发布于:2007-08-04 08:15
1.这个线程在哪创建都行,主要的是要达到你的目的,INIT只会调一次,而OPEN在CREATEFILE时就会被调到.
2.READ函数可以等到IST读完数据以后再返回,就不会有你的问题了. 3.CREATEFILE多次是可以的,主要是看你的系统有什么样的需求.多个线程从同一个设备上读写数据是否可行.比如对串口设备做这种操作就是没有意义的,而硬盘就是可以的. 需要注意的只有一点,就是把操作硬件的代码放在CriticalSection中,让同一时间只有一个线程在访问硬件. |
|
|
8楼#
发布于:2007-08-06 10:14
呵呵 抛了个砖头还引出玉来了 学习学习
|
|
|
9楼#
发布于:2007-08-07 20:48
不错,学习到不少。呵呵
|
|
10楼#
发布于:2007-11-25 23:58
学习~~~
|
|
|