我用的是s3c6410+wince6,
在调用系统层的CreateFile()和WriteFile()函数后,似乎只是把数据放入软件或硬件的缓冲区就返回了,并未阻塞到硬件上真正发送完毕。
我现在是要确切的知道硬件上已发送完毕,有没有什么办法?
用发送中断可获知数据已发出。
串口发送缓冲区只有8个字节,超过8字节就要分多次写入,所以用这个中断也会误判吧?很多能只是某8个字节发送完毕而不是所有数据发送完毕
串口发送缓冲区只有8个字节?这个驱动也太变态了吧!!!
这个可以通过设置串口的参数来控制,虽然这样做没有采用中断即时,但个人认为最实用。
检查Transmitter Holding Register Empty Interrupt (16550兼容)
不过只能检查串口的缓冲寄存器空。 还需要上层配合。 我觉得楼主还是直接检查WriteFile的返回值和返回参数(ActualWritten),只要驱动没问题,数据是不会丢失的,WriteFile写入的内容,驱动会缓存起来,然后慢慢发出去。
--------------------------------------------------------------
最终的解决方式是:
根据波特率和开始位停止位参数计算最短时间,超过这个时间之后就开始查询串口缓冲区为空的标志位。