2011-11-03 198 views
1

我正在为linux编写一个SPI驱动程序。一些相关文件是http://www.mjmwired.net/kernel/Documentation/spi/spi-summaryhttp://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch25.htmlSPI完成回调处理程序

大部分时间传输成功执行,我的完成回调被调用。当我访问消息的status时,我总是看到零(表示)。 actual_length是112(我的传输长度)根据需要。

但是,经过一段时间后,可能会发生与actual_length == 0的回调。所有后续调用甚至有actual_length == 224。在关闭spi设备之后,回调仍然会被调用,消息长度会迅速上升(每次调用,它会增加112),尽管我没有再打spi_async

任何人都可以提供一个提示什么可能会导致此行为?

非常感谢!

回答

0

事实证明,原因是一个线程问题:我们在最后一次传输完成之前覆盖了spi_message对象。

0

我不是一个专业知识,但如果你使用dma等,也许有缓存一致性问题。