1

我为改编自本书的 Raspberry Pi 实现了 1-wire 协议。它使用位碰撞来实现通信协议。BCM2835 库中的函数 bcm2835_delayMicroseconds() 用于产生所需的延迟。

它工作得很好,但并不完全可靠:有时我没有得到传感器的响应。我用示波器来追踪问题。这里是示波器屏幕截图,信号解释为绿色。 在此处输入图像描述 红色标记故障:开始低脉冲的位被延长,因此插入了一个流氓“0”。这导致传感器无法识别命令并且不响应它(随后的“1”)。

我相信这是因为操作系统在传输该位期间抢占(切换到另一个任务/线程/进程)。那么是否有可能告诉Linux在执行某个函数期间不要抢占(在这种情况下用于写入和读取单个位)?或者也许这个问题有另一种解决方案?

4

0 回答 0