Ein häufiges Szenario ist ein PC, der Befehle über RS232 an einen Mikrocontroller sendet. Mein PC-Programm sendet Befehle (die jeweils aus mehreren Bytes bestehen) so schnell wie möglich an einen kleinen Roboter. Der Mikrocontroller am Roboter ist ein Parallax-Propeller.
Ich habe festgestellt, dass, wenn ich Bytes auf der Mikrocontrollerseite nicht schnell genug verarbeite, die Standardpuffer in den gängigen Treibern für die serielle Schnittstelle, die für den Propeller verfügbar sind, sehr schnell überlaufen können. (Die Puffer liegen im Allgemeinen zwischen 16 und 256 Byte). Ich kann diese Puffer willkürlich erhöhen oder meinen eigenen größeren Ringpuffer erstellen, möchte jedoch einen methodischeren Ansatz zur Bestimmung der entsprechenden Größenanforderungen und / oder der minimalen Wartezeit, bevor ich Bytes aus dem Treiberpuffer der seriellen Schnittstelle herausziehe .
Auf den ersten Blick:
- 115200 == 115,2 Bits pro Millisekunde == ~ 12,8 Bytes pro Millisekunde (unter der Annahme von 1 Stoppbit)
1) Ist das eine gültige Methode zur Berechnung des Timings für serielle Übertragungen?
Auch angesichts meines spezifischen Setups:
- PC-Programm <--> Bluetooth-Treiber für serielle Profile <--> Bluetooth-Transceiver <- * -> BlueSMIRF-Funkmodem <--> Parallax-Propellerprogramm
2) Was ist die maximale Datenmenge, die ich für einen bestimmten Zeitraum konsistent senden kann, ohne dass Probleme auftreten?
Vielleicht bin ich damit fertig, Dinge zu komplizieren, aber es scheint, dass möglicherweise mehrere Puffer in der obigen Übertragungskette enthalten sind. Wie gehen andere gewöhnlich damit um? Drosseln sie den PC, der auf eine bekannte sichere Rate sendet? Flusskontrolle implementieren? Wie wirkt sich dies bei der Implementierung der Flusssteuerung auf die Bandbreite und die Antwortzeiten aus?
(Wenn es darauf ankommt, besteht mein Experiment darin, einen Joystick auf dem PC zu verwenden, um mehrere Servos mit sofortiger Reaktion auf die Joystickbewegungen zu steuern. Jede kleine Bewegung des Joysticks führt also dazu, dass mehrere Befehle an den Mikrocontroller gesendet werden. Die Befehle sind nicht nur einfach Positionsbefehle beinhalten jedoch auch das Beschleunigen / Deaktivieren von Servos im Laufe der Zeit, und dies ist der Grund, warum der Mikrocontroller eine erhebliche Anzahl von Taktzyklen verbringt, bevor neue Bytes verarbeitet werden.)