Я использую Xbee, подключенный к Raspberry pi3, API-mode = 2 и посылаю 29-байтовые данные из xbee через последовательный интерфейс и считываю (29 байт) через последовательный интерфейс, оба из которых работают хорошо, как показано в коде ниже:
ser=serial.Serial(PORT, BAUDRATE)
while True:
#SEND DATA
wrt_time = datetime.now().microsecond
msg=[0x10,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xFF,
0xFF,
0xFF,
0xFE,
0x00,
0xCC,
0x66,
0x00,
0x00,
0x01,
0x00,
0x03,
0xFF,
0x01,
0x00,
0x01,
0x77,
0x00,
0x1D]
ser.write(chr(0x7e)+
chr(len(msg)//256)+
chr(len(msg)%256))
ser.write(''.join(chr(x) for x in msg))
check=(0xFF - ( sum(msg) & 0xFF ))
ser.write(chr(check))
wrt_elapsed_time = datetime.now().microsecond - wrt_time
print("write time: ", wrt_elapsed_time)
read_time = datetime.now().microsecond
data = ser.read(29)
read_elapsed_time = datetime.now().microsecond - read_time
print("read time: ", read_elapsed_time)
ser.close()
Я также измеряю время, необходимое для чтения и записи данных через последовательный порт. Время записи составляет ~ 700 мсек, а время чтения ~ 140000 мсек, что довольно много. Проблема в том, что ser.read
занимает довольно много времени. Тот же код на C ++ занимает в 10 раз меньше времени, чем Python, поэтому я уверен, что это не проблема с оборудованием. У меня есть два вопроса:
1. По какой причине Python занимает больше времени? Имеет ли Python тот же UART, что и C / C ++, или есть другой, реализованный на более высоком уровне для Python?
2. Можно ли в любом случае сократить время, затрачиваемое на выполнение последовательного чтения?