2016-02-11 32 views
1

有沒有人有在多個線程中使用多個I2C設備的例子?我遇到了一些問題,如果我單步執行,一切都可以正常運行,如果我運行它,所有的事情都會搞砸 - 顯然是一種競爭狀態。 i2C流量實際上正在被損壞(在我的邏輯分析儀上查看),這讓我感到有些意外。我認爲I2C操作是原子的,但看起來並非如此。在Window 10 IoT Core中,在多線程應用程序中訪問I2C設備的正確方法是什麼?

我的應用程序使用溫度傳感器和電機控制器,都是I2C設備。溫度探頭正在計時器中進行採樣,我認爲這是在工作線程上運行的。

我看到I2C流量的數據損壞,我認爲可能發生的情況是兩個線程都試圖同時寫入不同的從地址。

該文檔在線程問題上有點沉默,所以我不確定在什麼級別我應該保護免受競爭條件。從我看到的問題來看,它看起來像一個I2C控制器一次只能執行一個操作,所以我必須在控制器級別進行保護。

我對如何處理這個一些想法,但文件是穿線的要求有點無語了,所以我認爲我會問是否有人已經做到了成功之前,我熄滅了一些死角:)

回答

1

您是否有計時器用於I2C上的調度操作?在此線程之外創建一個ConcurrentQueue,因爲此時要將某個命令發送到clinet,請將該命令添加到列表中。之後,在I2C循環中,檢查列表中是否有待處理的內容併發送。同時嘗試從設備讀取。 如果它不工作,請發送一些示例代碼。

相關問題