Windows下 WDM 驱动
应用程序需要读取PCI卡(PCI9054)的数据
在驱动的读请求处理例程中
1、启动DMA传输将卡中的数据读取到驱动的缓冲区A中,
2、然后将数据复制到读请求的缓冲区B,
3、并将缓冲区A中的最后四个字节记录到缓冲区C中。
为了调试方便,我将缓冲区A初始化为“#”
现在的问题是:
读请求处理完成后,缓冲区B中的数据有时候会是“#”,而缓冲区C中的数据是对的
在第2步之前加1ms的延时,出错的概率会减小
Windows下 WDM 驱动
应用程序需要读取PCI卡(PCI9054)的数据
在驱动的读请求处理例程中
1、启动DMA传输将卡中的数据读取到驱动的缓冲区A中,
2、然后将数据复制到读请求的缓冲区B,
3、并将缓冲区A中的最后四个字节记录到缓冲区C中。
为了调试方便,我将缓冲区A初始化为“#”
现在的问题是:
读请求处理完成后,缓冲区B中的数据有时候会是“#”,而缓冲区C中的数据是对的
在第2步之前加1ms的延时,出错的概率会减小
根据您的描述,问题可能是由于DMA传输完成后,缓冲区B中的数据有时候会是初始化的"#"字符,而不是从缓冲区A正确复制过来的数据。为了解决这个问题,您可以尝试以下几个步骤:
下面是一个示例代码片段,展示了如何在驱动的读请求处理例程中进行数据复制操作:
// 确保DMA传输完成后再进行数据复制
wait_for_dma_transfer_complete();
// 复制数据从缓冲区A到缓冲区B
memcpy(buffer_B, buffer_A, buffer_length);
// 记录缓冲区A中的最后四个字节到缓冲区C
memcpy(buffer_C, buffer_A + (buffer_length - 4), 4);
请注意,以上代码仅为示例,您需要根据您的具体情况进行适当的修改和调整