2017-06-12 3 views
1

作業リストでI²C送信ワーカーを実行しようとしています。私はそれを正しい方法を行う方法を見つけ出す傾ける理由ImはConCurrentQueueでI²Cコマンドをsaveingとスレッディングとキューに新しいwiringPi LibaryC#I²C送信者スレッド経由配線ピン

イム経由で送信しよう

は、thatsの。

、私はこれを試してみましたが、それは文句を言わないで、すべての作業:誰かがこれを見ては間違って何イムを教えていできればD

がいいだろう。

class worker 
{ 
    public bool enabled = false; 
    public struct i2c_command 
    { 
     public int chip_number; 
     public byte subadress; 
     public byte data; 
    } 

    private ConcurrentQueue<i2c_command> i2c_commandsList = new ConcurrentQueue<i2c_command>(); 

    public void write_i2c(int cn, byte sa, byte data) 
    { 
     i2c_command i2c_c = new i2c_command(); 
     i2c_c.chip_number = cn; 
     i2c_c.subadress = sa; 
     i2c_c.data = data; 
     i2c_commandsList.Enqueue(i2c_c); 
    } 

    public void i2c_worker() 
    { 
     enabled = true; 
     while (enabled = true) 
     { 
      i2c_command i2c_send = new i2c_command(); 
      i2c_commandsList.TryDequeue(out i2c_send); 

      WiringPi.I2C.wiringPiI2CWriteReg8(i2c_send.chip_number, i2c_send.subadress, i2c_send.data); 
     } 
    } 
} 

これは、スレッド開始されます。開始について

worker worker = new worker(); 
ThreadStart i2c_sender_ref = new ThreadStart(worker.i2c_worker); 
Thread i2c_sender = new Thread(i2c_sender_ref); 
i2c_sender.Start(); 
+0

https://raspberrypi.stackexchange.comに投稿することを検討する必要があります –

+0

I2Cの書き込みを行うスレッドを作成して開始するコードを表示できますか? – PaulF

+0

私が探している主な機能は、ラズベリーとは関係ありません。ただ、ConcurrentQueueを探していて、私の例でそれをどう使うことができますか? –

答えて

1

を使用すると、キューからコマンドを取得する場合はチェックしません - あなたのコードがよりこのようにする必要がある:

public void i2c_worker() 
{ 
    enabled = true; 
    while (enabled) 
    { 
     i2c_command i2c_send; 
     if (i2c_commandsList.TryDequeue(out i2c_send)) 
      WiringPi.I2C.wiringPiI2CWriteReg8(i2c_send.chip_number, i2c_send.subadress, i2c_send.data); 
    } 
} 
関連する問題