我有2个运行ZigBee Pro(2007)的XBee Serie 2模块连接在2个不同的Arduinos Unos上。
由于Arduino Uno是单线程,我试图使用中断来暂停主函数,并在XBee模块收到数据时暂时不做。
我尝试使用Arduino中的attachinterrupt函数并将引脚2(int0)连接到XBee模块的Rx但是我没有任何中断,无论是从RISING状态,DOWN状态还是FALLING状态。
attachInterrupt(0, interruptXBee, RISING);
使用Rx引脚我做错了,我应该使用其他引脚吗? (我见过RTS / CTS引脚,但我的有效负载小于缓冲区,所以我没有办法使用这些引脚。)
谢谢!
答案 0 :(得分:1)
在典型的应用程序中,您要让串口驱动程序处理串行中断,缓冲进来的字节,然后在主循环中定期检查缓冲区中是否有要处理的数据。
在具有单个线程的嵌入式平台上,我喜欢使用tick()
函数对程序的每个部分进行编码。每个tick都会做一些工作,记住它的状态,然后返回主线程。根据程序需要的响应速度,您可能希望将每个调用的tick函数限制为20ms到100ms。有时刻度线会立即返回,因为它没有任何事情要做。
此外,您可能具有快速服务中断的中断服务程序,将数据存储在下一个tick可以找到并处理它的位置。
因此,在您的情况下,您在主循环中调用了xbee_tick()
。它在串行接收缓冲区中查找数据,对其进行处理,然后返回主循环。