【问题标题】:C# I²C sender Thread via wiringPiC# I²C 发送者线程通过wiringPi
【发布时间】:2017-06-12 12:54:59
【问题描述】:

我正在尝试使用工作列表进行 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();

【问题讨论】:

  • 你应该考虑在raspberrypi.stackexchange.com发帖
  • 您能否展示您创建和启动线程以进行 I2C 写入的代码。
  • 我寻找的主要功能与Raspberry无关......我只是在寻找ConcurrentQueue以及如何在我的示例中使用它
  • @PaulF 我正在“main”函数中初始化“worker”类并使用“i2c_worker”函数启动一个线程,所以我可以通过“write_i2c 函数”向线程添加命令
  • 查看你的代码比你试图解释你想要做什么更有帮助——你的“工人”阶级是什么? “i2c_worker”没有启动线程,它由一个while循环组成(其中有一个错误,顺便说一句)。

标签: c# multithreading mono raspberry-pi wiringpi


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2010-12-16
    • 2013-10-28
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多