gpt4 book ai didi

c# - 在 Window 10 IoT Core 的多线程应用程序中访问 I2C 设备的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 16:50:14 27 4
gpt4 key购买 nike

有没有人有在多线程中使用多个 I2C 设备的例子?我的有一点问题,这是其中之一,如果我单步运行它一切正常,如果我全速运行它一切都会搞砸 - 显然是竞争条件。 i2C 流量实际上已经损坏(如我的逻辑分析仪所见),这让我有点吃惊。我假设 I2C 操作是原子操作,但看起来情况不一定如此。

我的应用使用温度传感器和电机 Controller ,这两种都是 I2C 设备。温度探测器正在定时器中采样,我认为它正在工作线程上运行。

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

该文档在线程问题上有点沉默,所以我不确定我应该在什么级别上防止竞争条件。从我看到的问题来看,I2C Controller 似乎一次只能执行一项操作,因此我必须在 Controller 级别进行保护。

我对如何解决这个问题有一些想法,但文档对线程要求有点沉默,所以我想在我走入死胡同之前先问问是否有人已经成功地做到了 :)

最佳答案

你有定时器来调度 I2C 上的操作吗?在这个线程之外创建一个 ConcurrentQueue

ConcurrentQueue<string> commandsList = new ConcurrentQueue<string>();

当您想向 clinet 发送内容时,将命令添加到列表中。之后,在 I2C 循环中,检查列表中是否有待处理的内容并发送。同时尝试从设备读取。如果它不起作用,请发送一些示例代码。

关于c# - 在 Window 10 IoT Core 的多线程应用程序中访问 I2C 设备的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com