当我在终端中运行此脚本时,我可以连续接收数据,但最终我的整个计算机都冻结了。有人可以解释为什么会这样吗?
#!/usr/bin/env python
from sys import argv
from msppg import Parser
import serial
if len(argv) < 2:
print('Usage: python %s PORT' % argv[0])
print('Example: python %s /dev/ttyUSB0' % argv[0])
exit(1)
def handler(pitch, roll, yaw):
print(pitch, roll, yaw)
port.write(request)
pitch, roll, yaw = 5, 15, 20
port = serial.Serial(argv[1])
parser = Parser()
request = parser.serialize_ATTITUDE_Request()
parser.set_ATTITUDE_Handler(handler)
def cycle(value):
return (value + 1) %360
while True:
print port.read(1)
if port.read(1) != None:
port.write(parser.serialize_ATTITUDE(pitch, roll, yaw))
pitch = cycle(pitch)
roll = cycle(roll)
yaw = cycle(yaw)
答案 0 :(得分:1)
有人可以解释为什么会这样吗?
while True:
没有break
。
答案 1 :(得分:0)
看起来该应用正在尝试从物理端口读取并且您的while
循环不断阅读。此行为将查找您的计算机,因为没有等待或回调来读取数据。
答案 2 :(得分:0)
您的问题在于port.read(1)行。根据{{3}},您指定只需要从USART硬件缓冲区读取一个字节。但是,如果没有要读取的字节,PySerial默认会等待一些数据,导致程序“冻结”。
我的建议是在端口init行添加一个超时arg(其中12表示12秒,它可以是你想要的任何东西)
port = serial.Serial(argv[1], timeout=12)