2016-02-11 28 views
1

有没有人有在多个线程中使用多个I2C设备的例子?我遇到了一些问题,如果我单步执行,一切都可以正常运行,如果我运行它,所有的事情都会搞砸 - 显然是一种竞争状态。 i2C流量实际上正在被损坏(在我的逻辑分析仪上查看),这让我感到有些意外。我认为I2C操作是原子的,但看起来并非如此。在Window 10 IoT Core中,在多线程应用程序中访问I2C设备的正确方法是什么?

我的应用程序使用温度传感器和电机控制器,都是I2C设备。温度探头正在计时器中进行采样,我认为这是在工作线程上运行的。

我看到I2C流量的数据损坏,我认为可能发生的情况是两个线程都试图同时写入不同的从地址。

该文档在线程问题上有点沉默,所以我不确定在什么级别我应该保护免受竞争条件。从我看到的问题来看,它看起来像一个I2C控制器一次只能执行一个操作,所以我必须在控制器级别进行保护。

我对如何处理这个一些想法,但文件是穿线的要求有点无语了,所以我认为我会问是否有人已经做到了成功之前,我熄灭了一些死角:)

回答

1

您是否有计时器用于I2C上的调度操作?在此线程之外创建一个ConcurrentQueue,因为此时要将某个命令发送到clinet,请将该命令添加到列表中。之后,在I2C循环中,检查列表中是否有待处理的内容并发送。同时尝试从设备读取。 如果它不工作,请发送一些示例代码。

相关问题