C# I²C 发送线程通过 wiringPi
C# I²C sender Thread via wiringPi
我正在尝试用工作列表做一个 I²C 发送工人。
我正在将 I²C 命令保存在 ConCurrentQueue 中并尝试通过 wiringPi 库发送它
我是线程和队列的新手,这就是为什么我不知道如何以正确的方式做到这一点。
我试过了,但根本行不通: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();
首先,您不检查是否从队列中获取命令 - 您的代码需要更像这样:
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);
}
}
我正在尝试用工作列表做一个 I²C 发送工人。
我正在将 I²C 命令保存在 ConCurrentQueue 中并尝试通过 wiringPi 库发送它
我是线程和队列的新手,这就是为什么我不知道如何以正确的方式做到这一点。
我试过了,但根本行不通: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();
首先,您不检查是否从队列中获取命令 - 您的代码需要更像这样:
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);
}
}