1

我想为传感器设备编写 I2C 驱动程序。有一个非零转换时间,我不想浪费内核时间等待和轮询忙状态,直到设备忙。

我以为我设置了一个计时器并不时调用更新。

然而,当执行到任何 I2C 函数时,整个系统都会冻结。

我准备了一个非常简化的示例,但它不起作用。一切都很好,直到 I2C 访问。

http://pastebin.com/kP5LCK2c

没有 I2C 的东西,代码就可以工作。没有定时器的东西,I2C 就可以工作。

我没有找到如何以异步(非阻塞)方式使用 I2C。

4

1 回答 1

2

由于 i2c 函数处于休眠状态,因此无法从计时器调用它们。幸运的是,计时器并不是安排未来工作的唯一方法。查看工作队列:

特别是查看queue_delayed_work,它将允许您在将来在能够休眠的进程上下文中运行函数。

于 2012-10-31T14:28:18.740 回答