Rolf schrieb:
> Hallo,
>
> ich verwende die Library von Peter Fleury und bin eigentlich ganz
> zufrieden. Mich stört nur, dass der Controller Blockiert wird, wenn der
> Buffer voll ist:
Na ja irgendwas muss er ja machen
> gibt es da eine bessere Implementierung? Z.B., dass ich die Funktion in
> die Hauptschleife rein nehme, und bei jedem Schleifendurchlauf geprüft
> wird, ob der Buffer jetzt leer ist. So das während des Wartens noch
> andere Dinge erledigt werden können.
Du bist frei in dem was programmiert wird.
Mach dir in dei Fleury Lib eine Funktion rein, die dir die Abfrage
gestattet, wieviel Buffer zur Zeit zur Verfügung steht.
Aber was tust du zb. wenn du einen String mit 60 Zeichen Länge über
einen Transmit-Buffer mit lediglich 40 Zeichen Platz versenden willst?
Die Original-Implementierung der String-Sende Funktion schiebt die
ersten 40 Zeichen direkt in den Buffer und geht dann in Warteposition.
Sobald durch die Hardware ein Zeichen rausgeschickt wurde, rutscht
wieder ein Zeichen nach, so dass der Buffer ständig gefüllt bleibt.
Irgendwann ist der Punkt erreicht, an dem 20 Zeichen bereits
rausgeschickt wurden, der Buffer mit seinem 40 Zeichen die restlichen
Zeichen zwischenspeichert und daher die String-Funktion returnen kann,
obwohl der lange String noch gar nicht komplett draussen ist.
Klar kannst du an den Aufrufer delegieren, dass der nur dann in die
Sendefunktionen geht, wenn auch sicher ist, dass alles rausgehen kann.
Aber es gibt eben auch immer Sonderfälle, die dann komplizierter werden.