Ist eventuell von Interesse
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.
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
Hier der Ringpuffer. Noch nicht voll ausgetestet. Wo siehst du Verbesserungsmöglichkeiten?
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.
Der getestete Ringpuffer zum seriellen Senden. Nach der Assemblierung ist die Formatierung im Listfile vorhanden.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.