这更多的是一个软件设计问题,因此它应该独立于语言——但为了完整性,让我们假设C++和POSIX系统。
我努力实现的目标:
- 通过I2C和1W协议读取低电平传感器(所有读取都需要时间,但不一定需要大量资源CPU/内存)/所有设备的读取频率不同
- 反馈读取的信息(反馈频率比最慢的传感器快)
- 当收到新命令时(通过蓝牙(bluez))做出响应
我该如何最好地做到这一点
我现在所拥有的是,我从具有相同超类的传感器中创建对象,其中有一个ptreath
测量循环,其中包含写入最近值参数和一个不断读取最后值的主循环。
这在我看来相当笨拙,因为我必须查看变量等。有更好/更容易的方法来实现这一点吗?反馈算法相当直接,不需要太多资源。
我通常所做的是在传感器轮询线程中实例化测量消息,并在一个生产者-消费者队列中将它们全部排队到一个运行实现控制算法的状态机的线程。控制消息也可以被推到队列中,从而以相同的方式得到正确处理。
这将所有复杂的控制决策保留在一个线程、一个状态引擎中,在那里可以轻松地逐个消息调试操作。
主线程可以在PC队列上等待并操作SM。阻塞PC队列消除了毫无意义、浪费和可避免的var轮询。