阅读:1416回复:10
关于读d12缓冲区的问题
1.主机向d12写数据,单片机从d12缓冲区把数据读出,在主程序中有一段查询bEPPflags.ep2_rxdone是否为1的程序,若为1则把该标志清0并读取EpBuf内容。如果去掉这段程序,直接读EpBuf内容会不会出现什么问题呢?这段程序有什么用呢?
2.单片机向d12缓冲区写数据,主机从d12读数据时,若主机没有及时读走数据,这样的话单片机可以一直写数据到d12缓冲区么?反向的传输(即主机通过d12向单片机发送数据)中若单片机不能及时取走数据,主机是不能向d12写的,不知两边的机制是不是一样的? 谢谢指点! |
|
沙发#
发布于:2005-04-04 10:47
一般向缓冲区写的时候,若主机没有及时读走数据,前面的数据就会被后面的冲掉,所以我想在写的后面,立刻读,也许可以
|
|
板凳#
发布于:2005-04-05 08:49
现在我的问题是:我的主机不能及时读出数据,因此会丢包,不知道有没有什么方法可以控制单片机向d12的写过程,使它不会覆盖d12的缓冲区造成丢包?谢谢大侠指点!!!
|
|
地板#
发布于:2005-04-05 12:45
看一下这个函数的用法D12_ReadInterruptRegister,成功写了数据并被主机取走后,会有相应的中断位产生的,可以通过查询的方式来解决。
while((D12_ReadInterruptRegister() & D12_INT_ENDP2IN) != D12_INT_ENDP2IN); D12_ReadLastTransactionStatus(5); // Clear interrupt flag |
|
地下室#
发布于:2005-04-05 14:38
这个中断是主机读走数据后才产生的么?我是在d12本来的固件程序上改的,它本来就有当这个中断产生后清中断标志位的处理,就是和你的建议中一样的处理方法,但是我收到的数据就会丢包。
我的理解是当单片机向d12的缓冲区写了数据后这个中断就会产生。 不知道我的理解对不对?主机读走数据后还有什么标志会改变么? 谢谢你的指点! |
|
5楼#
发布于:2005-04-05 16:47
数据发送走后中断才能产生
|
|
6楼#
发布于:2005-04-05 17:23
这样呀?那么在主机读走数据并且执行了清中断标志后,d12的in缓冲区有没有被自动清空呢?实在是感谢大侠的指点!
|
|
7楼#
发布于:2005-04-06 09:22
不管有没有被清空,反正你可以把后续的数据往in endpoint里面写了。
|
|
8楼#
发布于:2005-04-06 10:29
谢谢各位的帮助!!!虽然我的问题还是没有解决,但是至少我的概念上有了进步,谢谢!以后有问题再请教各位了!
|
|
9楼#
发布于:2005-04-06 11:25
这样呀?那么在主机读走数据并且执行了清中断标志后,d12的in缓冲区有没有被自动清空呢?实在是感谢大侠的指点! 自动清空了 |
|
10楼#
发布于:2005-06-28 08:37
如果设备一次发送128字节,而主机一次只读取64字节的话,应该会出现丢包的现象,即主机只能读到设备发送的头64字节,然后通过中断告诉设备可以继续发送了,结果设备发送了新的128字节。实际情况是不是这样呢?
|
|