Gepuffertes interruptgesteuertes Senden

Gast #186211
Lesenswert?

Also ich sag Dir mal, wie es ist: Dein Code ist grauenhaft !

Wozu wird 'merker' in einem Register gehalten, um angeblich CPU-Takte
zu sparen, um ihn dann doch wieder zu pushen oder z.B. 'hilfszelle'
irgendwo im RAM abzulegen. Als Merker würde TXIE völlig reichen.

Puffer umsortieren ? Warum das denn ?
Der Text ist durch fehlende Formatierung äußerst unleserlich, was
eigentlich schon frech ist.

Erfahrene Programmierer werdem sich bei den Kommentaren wie
"" Kritisch sind zu große Puffer bei hohen sendegeschwindigkeiten und
hohem Datenaufkommen
; Bei zu großem Puffer kann das umsortieren des Puffers länger dauern
als der Sendevorgang ""
gleich zur DEL-Taste begeben.

Anfänger werden mit dem schlechten Beispiel auf den Holzweg geführt.
Vielleicht machst Du einen 2. Anlauf, vielleicht auch dann mit
Ringpuffer, wie er schon überall verwendet wird.
Gast #186212
Lesenswert?

Magst ja recht haben.
Auf den Ringpuffer bin ich garnicht gekommen.
Damit müßte eigentlich noch mehr Rechenzeit frei werden
Allerdings sehe ich auch hier, das der Ringpuffer volläuft.
Das umsortieren entfällt aber.
Werde mich mal ranmachen.

TXIE allein reicht nicht, UDRE müßte die Lösung bringen.
Der Zustand im Moment des Interrupts ist nicht voraussehbar.
Ein Rücksetzen von TXIE könnte zur Blockade führen.

Ich dachte, ich bin hier in einer Hobbyumgebung, das erfahrene
Programmierer das Forum nutzen ist natürlich möglich.

Auf den Holzweg wollte ich niemanden führen. Betrachte es doch einfach
als meinen eigenen geistigen Erguß.

Ich gelobe Besserung
Gast #186214
Lesenswert?

Es tut mir leid, aber der Text ist ohne jegliche Formatierung; ich
weigere mich, ihn näher anzusehen.

Programmierfehler gibt es immer. Es ist aber, glaube ich, im Sinne
aller Interessenten, hier lauffähigen und getesteten Code zu bekommen.
Sieh Dir dich 'mal die anderen Beiträge in dieser Codesammlung an.
Gast #186216
Lesenswert?

Nun hat sich doch noch ein Fehler in der Flusssteuerung eingeschlichen

.if flusssteuerung = 1
sbrc xl,2      ;ist der Sendepuffer zu voll?
rjmp xonsenden    ; nein
lds xl,puffer    ;stelle den Fuellstand des Puffers fest
cpi xl,low(empfangsunterbrechung)

; ++++++++++ fehler >>brlo xonsenden richtig: brlo senden5,
brlo senden5    ; nicht zu voll,

lds xl,puffer+1
cpi xl,high(empfangsunterbrechung)
breq xoffsenden    ; zu voll, sende als naechstes Zeichen XOFF

.endif

Bitte berichtigen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren