mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Serielle Datenübertragung - Flaschenhals


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine GUI programmiert die von meinem Controller Daten entgegen 
nimmt.
Die Geschwindigkeit ist jedoch ernüchternd.

mein Protokoll sieht so aus:
µC ->Datenpaket-> PC
µC <-Bestätigung<- PC

also µC codiert die Daten für das Paket, schickt sie, der PC empfängt 
sie, nimmt das Paket auseinander, dekodiert die Daten, schreibt sie in 
einen Puffer und schickt dann die Bestätigung, Controller empfängt diese 
und fängt dann an die nächsten Daten zu codieren...usw

meine Datenpakete sehen so aus:
|Startbyte|Typebyte|Anzahlbyte|   ---Datenbytes---|Stopbyte|  = max 64Byte (von 
mir festgelegt)

meine Bestätigungen sind so:
|Startbyte|Typebyte|Anzahlbyte (=0)|Stopbyte|  = 4Byte

jedes Datenpaket oder Bestätigung löst ein Event auf der Gegenseite aus 
wodurch eine Statemaschine angeschmissen wird


Es wurden 1000 Pakete je 64Byte übertragen. Betrachtet wurde nur die 
Daten (60Byte pro Paket) nicht der Overhead, also 1000*60Byte = 
60000Byte
Ich habe vollgende Messungen gemacht:

µC MHZ | Baudrate | Dauer (Sek) | Theorie (Sek) | Byte/Sekunde |

3,68         9600       95           50               631
3,68        19200       65           25               923
3,68       230400      37,7           2              1590
3,68       460800      37,7           1              1590

12         250000      24,5           2              2449
12         500000      23,4           1              2564

16         500000       22            1              2727
16        1000000       22            0.5            2727
16        2000000       22            0.25           2727

Also alles vieeeel zu langsam
Ich hab schon ein paar Ideen woran es liegt, aber was sagt ihr dazu?

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.
1. Es scheint delays zu geben. Der controller kann die naechsten bytes 
doch bereits codieren waehrend die alten noch am senden sind, waehrend 
auf eine bestaetigung gewartet wird.
2. Der PC ist auch eher lahm. Miss da mal den delay zwischen den 
packeten.
Auch der PC kann sich vorbereiten, sodass dessen delay minimiert wird.
3. Erhoeh die Blockgroesse. dann gibt es fuer ein festes Volumen weniger 
packete, weniger delays.
4. Man koennte mit ausstehenden Quittierungen arbeiten. Dafuer wuerde 
man mehrere Buffer benoetigen, sowie numerierte Packete. Dann kann der 
controller bereits das naechste packet senden, befor er die quittierung 
hat.

Ich hab mal eine Simulation diesbezueglich geschrieben. Hab sie aber 
grad nicht praesent.

Autor: Experte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Latenz!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da es mit dem MC-Takt korreliert, ist wohl die Verarbeitung auf dem MC 
der Flaschenhals.


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A...aha Soooo. schrieb:
> 2. Der PC ist auch eher lahm. Miss da mal den delay zwischen den
> packeten.
> Auch der PC kann sich vorbereiten, sodass dessen delay minimiert wird.

hm das verstehe ich nicht ganz, kannst du das genauer erklären?

als erstes werde ich:
A...aha Soooo. schrieb:
> 1. Es scheint delays zu geben. Der controller kann die naechsten bytes
> doch bereits codieren waehrend die alten noch am senden sind, waehrend
> auf eine bestaetigung gewartet wird.
umsetzen, scheint am wenigsten aufwand zu sein

als 2. die Paketgröße erhöhen, scheint auch nicht soo viel aufwand zu 
sein

bin mal gespannt was das schon bringt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.