标签:spinlock 没有 toc 就会 内核 资料 sdn device 编程
由于项目需要,需要将DHT11移植到Linux。驱动程序如下
测试程序如下
本想,这驱动调试起来应该简单的。但在调试到过程中,发现采集到的数据有时正确,有时错误,成功率约为50%。于是按照手册微调一下时序,并没有解决问题。网上查阅相关资料,发现都是用单片机来编程的。当程序本来就是以裸奔的思想跑的,为什么移植到Linux会出错呢?从dht11出来的信号都正常啊。误打误撞,使用local_irq_disable这个函数后,读出的数据都正常啦。local_irq_disable通过屏蔽中断标志位,从而禁止内核的抢占。我猜测是Linux是个多任务系统,该系统按照一定的算法(每隔一段时间就会去跑另一段程序,时间不固定),调用一次驱动去读取数据的过程中(时间较长相对于时间片),这期间CPU去做其他事情了,等重新回来读取数据时,有可能错过了时序中的某个片段,从而出现有时读取数据正常,有时错误这种现象。
http://blog.csdn.net/mike8825/article/details/50804978
标签:spinlock 没有 toc 就会 内核 资料 sdn device 编程
原文地址:http://www.cnblogs.com/xihong2014/p/7208424.html