Ich habe ein einfaches Python-Skript für die Kommunikation mit einem Mikrocontroller (STM32F103C8T6) über den seriellen Port. Ich verwende pySerial, um ein paar 44-Byte-Nachrichten gleichzeitig zu schreiben.Minimale Verzögerung für die serielle Kommunikation mit Python
[...]
serial = serial.Serial(serial.tools.list_ports.comports()[0].device, 115200)
packet0 = bytearray(INSERT_RELEVANT_44-BYTES)
packet1 = bytearray(INSERT_RELEVANT_44-BYTES)
serial.write(packet0)
time.sleep(0.1) # Delay between communications
serial.write(packet1)
[...]
Ich musste eine Verzögerung zwischen den Kommunikationen einfügen, sonst würde es nicht funktionieren. Meine Argumentation ist, dass für eine Baudrate von 115200 bps die Nachrichten 44 * 8/115200 = ~ 0,003 Sekunden gesendet werden sollten, daher sollte dies das minimale ideale Intervall zwischen dem Senden der Pakete sein. Der Code funktioniert jedoch für nichts kleiner als 0,1.
Warum? Fehle ich etwas? Ich nehme an, dass es wegen des Betriebssystems und des USB etwas Verzögerung gibt, aber es sollte ~ 0,7 Sekunden nicht berücksichtigen. Wie kann ich dies optimieren, um die minimal mögliche Verzögerung zu nutzen?
* "Es würde nicht funktionieren" * - Das ist eine Zusammenfassung, die keine Diagnoseinformationen enthält. Ihr * "Argument" * ist etwas aus; es berücksichtigt nicht 2 Bits Framing pro Zeichen. Was lässt Sie denken, dass das Übertragen mit minimaler Verzögerung praktisch ist; d.h. ist der Empfänger in der Lage, eine solche Paketrate zu verarbeiten (zu empfangen und zu verarbeiten)? Berücksichtigen Sie auch die Genauigkeit der Schlaffunktion und des Overheads einer interpretierten Sprache. – sawdust
hängt davon ab, wie Sie den seriellen Port in Stm32 verwenden. Ist es möglich, Code zu teilen, den Sie in stm32 schreiben? – saygins
Sie scheinen nur auf der sendenden Seite nach der Ursache zu suchen. Es gibt den Absender, der Zeichen verlieren könnte, und der Empfänger (In Ihrem Fall haben Sie offenbar einen USB-zu-Seriell-Adapter, der auch Zeichen verlieren könnte). Ohne weitere Diagnose auf * wo * das Problem liegt, können wir wahrscheinlich nicht helfen. – tofro