www.mikrocontroller.net

Forum: Compiler & IDEs UART Library ohne Interrupts


Autor: Andy S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jemand eine UART Library für AVRs, die keine Interrupts verwendet?
Also so auf die schnelle konnte ich in google nichts finden.

lg andy

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst du AVR-GCC-Tutorial/Der UART? Da sind die Grundfunktionen für 
einzelne Zeichen und Strings beschrieben. FIFO-Puffer, Ringpuffer fehlt 
allerdings noch.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> Kennst du AVR-GCC-Tutorial/Der UART? Da sind die Grundfunktionen für
> einzelne Zeichen und Strings beschrieben.
JAHA.

Ohne Interrupts und ohne Puffern.

Gibt es da nichts fertiges oder muss ich mir jetzt die codestücke 
zusammen kopieren?

lg andy

Autor: Thomas Klima (rlyeh_drifter) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:
> oder muss ich mir jetzt die codestücke zusammen kopieren?

JAHA.

;-)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JAHA

Es ist nie auszuschliessen, dass jemand eine solche UART-Polling Library 
mit Buffer geschrieben hat.

Viel Sinn macht es IMHO nicht. Der dafür nötige zyklische Aufruf der 
Pollingfunktionen im Userprogramm ist - selbst wenn man das im Timer 
macht - einer UART-Interrupt Library unterlegen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:

> Gibt es da nichts fertiges oder muss ich mir jetzt die codestücke
> zusammen kopieren?

Vielleicht findet sich ja noch jemand, der die 3 MINUTEN Zeit erübrigen 
kann, damit deine Tastatur geschont wird.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Vielleicht findet sich ja noch jemand, der die 3 MINUTEN Zeit erübrigen
> kann, damit deine Tastatur geschont wird.

vielleicht, wer weiß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei die übliche Gegenfrage bei so etwas immer lautet:

WARUM?

Wofür brauchst du eine UART-lib ohne Interrupt?

Oliver

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Wobei die übliche Gegenfrage bei so etwas immer lautet:

Die typische Gegenfrage, die sich mir im Laufe des Treads aufgedrängt 
hat, die ich mir aber verkniffen habe, wäre gewesen:
Kannst du eigentlich schon alleine aufs Klo, oder muss die Tante zum 
abputzen mitkommen?

Weils wahr ist. Manchmal frägt man sich schon ....

Autor: Andy S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Wofür brauchst du eine UART-lib ohne Interrupt?
Es macht scheinbar Probleme mit dem Empfangen von Zeichen vom VRBOT 
Modul
-->http://www.veear.eu/Forums/tabid/236/forumid/8/thr...

Karl heinz Buchegger schrieb:
> Kannst du eigentlich schon alleine aufs Klo, oder muss die Tante zum
> abputzen mitkommen?

hahahahahahaha, da Karl is wieda ma luthtig gege?


lg andy

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In

http://www.mikrocontroller.net/attachment/45469/pr...

gibt's ein uart-simple.c und uart.h

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy S schrieb:
> Oliver schrieb:
>> Wofür brauchst du eine UART-lib ohne Interrupt?
> Es macht scheinbar Probleme mit dem Empfangen von Zeichen vom VRBOT
> Modul

mit Sicherheit nicht

Ganz im Gegenteil, ganz im Gegenteil
Der Typ, der dort den Rat gegeben hat auf ungebuffert umzustellen ... 
ich weiß nicht was er raucht, aber er sollte besser aufhören damit.

Autor: m. keller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man lustig ist und z.B. ein kleinen "Scheduler" verwendet und auf 
Teufel komm raus, alles über den Scheduler laufen lassen möchte kann man 
auch eine lib ohne Interrupts nehmen.

Aber es macht selten Sinn und ist vor allem sehr schnell selbst getippt. 
Die Zeit in der auf Antworten hier gewartet hast, hätte locker gereicht 
eine einfache Funktion mit Ringbuffer usw zu schreiben und zu testen!

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy S schrieb:
> Es macht scheinbar Probleme mit dem Empfangen von Zeichen vom VRBOT
> Modul
> -->http://www.veear.eu/Forums/tabid/236/forumid/8/thr...

Prust,
wenn ich den letzten Eintrag da richtig lese, dann sagt der Typ, daß es 
Probleme geben kann wenn man noch Daten im Empfangspuffer stehen hat, 
die von einer vorherigen Kommunikation stammen.
Deswegen soll man ungepufferte Kommunikation benutzen.
und du setzt noch einen drauf indem du auch noch blockierende Funktionen 
fürs Lesen und Schreiben benutzen willst.
Schon Klasse.

Die Frage ist doch wohl warum stehen da noch Daten von vorher drin.
Eine intelligentere Lösung wäre das Löschen des Puffers vor der nächsten 
Kommunikation. Und/oder dem vollständigen Lesen der Daten, schliesslich 
haben diese Daten wohl auch einen Sinn.
Aber dazu müsste man wohl selbst denken statt Code zusammenzukopieren, 
ach so das ist ja auch schon zu viel Arbeit.

Die Lösung mit dem ungepufferten Lesen ist natürlich Sonderklasse, frei 
nach dem Motto: "Was ich nicht weiß, macht mich nicht heiß".

Gruß beim Popcorn essen, ich hol jetzt ein Bier :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es nicht nur super einfache Programme sind, macht sich ein FIFO 
immer bezahlt. Ansonsten kriegt man ruchzuck Timingprobleme.

Beitrag "AVR-GCC: UART mit FIFO"


Peter

Autor: Andy S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Udo Schmitt schrieb:
> und du setzt noch einen drauf indem du auch noch blockierende Funktionen
> fürs Lesen und Schreiben benutzen willst.
Nein, wenn du die 3. Zeile springdt, dann kommst du drauf dass ich das 
nicht war. Der Name von ihm steht links weiter uben im Katerl.

Udo Schmitt schrieb:
> Aber dazu müsste man wohl selbst denken statt Code zusammenzukopieren,
> ach so das ist ja auch schon zu viel Arbeit.

Gut, dass wird da ab zu mal Komiker haben, sonst wär ja das ganze 
langweilig.

Udo Schmitt schrieb:
> ich hol jetzt ein Bier :-)

Das einzig vernünftige.

Karl heinz Buchegger schrieb:
> mit Sicherheit nicht

Mit welcher Begründung nicht wäre jetzt wiederrum interessant.
Weil wenn sich der ppscher nicht auskennt und die drauf kommen dann 
schickens den n canelli oder so und der kennt sich aus.

Mein Programm ist oerfekt, also an mir kann es theoretisch nicht liegen.
Entweder hat es was mit der Doku oder krutzifuchsss^^

Udo Schmitt schrieb:
> Eine intelligentere Lösung wäre das Löschen des Puffers vor der nächsten
> Kommunikation.

Ich sehe keine Funktion in uart.h (peter fluerry) die das kann. Dh um 
einmal das machen zu können müsste ich mich zu 100% mit seinem 
Kaudawelsch auskennen.
Das wird sehr viel Zeit in Anspruch nehmen, weiß nicht ob ich diese 
Lösung für die vernünftigste halten soll, aber danke für den Tipp.

lg andy

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy S. schrieb:

> Karl heinz Buchegger schrieb:
>> mit Sicherheit nicht
>
> Mit welcher Begründung nicht wäre jetzt wiederrum interessant.

Weil dir der Interrupt-Betrieb garantiert, dass du kein einziges Zeichen 
von der Gegenstelle verpasst, solange die Interrupts generell nicht 
allzulange gesperrt sind und es zu keinem Buffer Overflow kommt.

Ganz im Gegensatz zum Pollingbetrieb. Einmal zulange nicht hingesehen 
und schon verpasst dein Programm die Hälfte.


> Mein Programm ist oerfekt, also an mir kann es theoretisch nicht liegen.

Der war gut.
Dein Programm ist alles andere als perfekt.

>> Eine intelligentere Lösung wäre das Löschen des Puffers vor der nächsten
>> Kommunikation.
>
> Ich sehe keine Funktion in uart.h (peter fluerry) die das kann.

Und?
Sowas kann man schreiben.

> Dh um
> einmal das machen zu können müsste ich mich zu 100% mit seinem
> Kaudawelsch auskennen.

Ah geh.
So eine Funktino hast du in 0 Komma Nox geschrieben.

> Das wird sehr viel Zeit in Anspruch nehmen,

Ja.
Ich hab schon gelernt, das dir grundsätzlich erst einmal alles zu schwer 
ist und zu lange dauert und überhaupt. Dafür bist du aber auch der 
größte, beste und schönste Programmierer, den die Welt je gesehn hat.


void clearUart()
{
  while( uart_getc() != UART_NO_DATA )
    ;
}


Fertig. Ob die Konstanten jetzt genauso heissen oder anders weiß ich 
nicht mehr. Ist aus dem Gedächtnis geschrieben und ich such mir jetzt 
nicht die Fleury Lib raus um dir diesen 3 Zeiler korrekt zu machen

> müsste ich mich zu 100% mit seinem
> Kaudawelsch auskennen.

Wenn jemand wie du, mit deinem Kentnisstand, den Fleury Source Code 
'Kauderwelsch' nennt, dann ist das schon fast eine persönliche Beleidung 
an Peter.
Es ist genau diese deine Attitüde, warum dir hier immer weniger Leute im 
Forum helfen. 0-auskennen, nix wissen, aber eine große Klappe und sich 
selbst als den Superchecker hinstellen. Das funktioniert bei 15-jährigen 
Mädchen, die fallen auf sowas noch rein. Aber in einem Technikerforum 
bist du mit so einem Verhalten ganz schnell unten durch.

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy S. schrieb:
> Udo Schmitt schrieb:
>> Aber dazu müsste man wohl selbst denken statt Code zusammenzukopieren,
>> ach so das ist ja auch schon zu viel Arbeit.
>
> Gut, dass wird da ab zu mal Komiker haben, sonst wär ja das ganze
> langweilig.
Wenn ich und vor allem Karl Heinz Komiker sind wegen der gemachten 
Aussagen, dann kriegst Du aber den Oskar für Komik und oder Faulheit, 
wenns den denn gäbe.

Andy S. schrieb:
> Udo Schmitt schrieb:
>> Eine intelligentere Lösung wäre das Löschen des Puffers vor der nächsten
>> Kommunikation.
>
> Ich sehe keine Funktion in uart.h (peter fluerry) die das kann. Dh um
> einmal das machen zu können müsste ich mich zu 100% mit seinem
> Kaudawelsch auskennen.
> Das wird sehr viel Zeit in Anspruch nehmen, weiß nicht ob ich diese
> Lösung für die vernünftigste halten soll, aber danke für den Tipp.
Ich habe auch geschrieben, daß man einfach alle noch vorhandenen Daten 
weglesen könnte, aber wahrscheinlich was alles zu lesen auch schon zu 
viel Arbeit.

Andy S. schrieb:
> Weil wenn sich der ppscher nicht auskennt und die drauf kommen dann
> schickens den n canelli oder so und der kennt sich aus.
Aha, die kennen sich aus.....ROFL muss ich mich jetzt verneigen?

Andy S. schrieb:
> Mein Programm ist oerfekt, also an mir kann es theoretisch nicht liegen.
> Entweder hat es was mit der Doku oder krutzifuchsss^^
RoflRofl, der Superduperprogrammierer, aber einen 3Zeiler um einen 
Ringpuffer direkt zu leeren oder wie Karl Heinz oben einfach den Puffer 
leerlesen ist doch zuuuuuu viiiiil Arrrbeiiit und dauert so lange. Schon 
klar da reicht ein Bier nicht.

Hach ist das wieder toll hier.
Viel Erfolg weiterhin, ich denke Du hast noch Raum zum verbessern ;-)
lG Udo

Autor: Andy S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Der war gut.
> Dein Programm ist alles andere als perfekt.

Schau bitte genauer rein, dann findest du unter anderem diese Zeile:
uart_putc(ARG_ACK); //get arguments (groupindex)

      while(uart_getc() & UART_NO_DATA); //solange keine Daten von der UART verfügbar sind tue nichts.
      wortposition = uart_getc() - ARG_ZERO;  //Empfangenes decodieren.
      sprintf(buffer_str,"%i",wortposition);

Karl heinz Buchegger schrieb:
> Wenn jemand wie du, mit deinem Kentnisstand, den Fleury Source Code
> 'Kauderwelsch' nennt, dann ist das schon fast eine persönliche Beleidung
> an Peter.

So ist das überhaupt nicht gemeint.
Gemeint war: Wenn ich einen komplizierten Code schreibe und du ihn 
nutzen willst, jedoch drauf kommst dass du etwas ein bisschen anderes 
haben willst, dann versuchst du das minimale zu ändern.
Trotzdem musst du wissen wie das ganze Zusammenspiel ist.

Karl heinz Buchegger schrieb:
> 0-auskennen, nix wissen, aber eine große Klappe und sich
> selbst als den Superchecker hinstellen.

Bei dir weiß ich jetzt nicht was ernst gemeint ist und was nicht, aber 
ok wenn das deine Meinung ist dann werde ich mich damit abfinden. Ich 
möchte die überhaupt nichts beweisen.

Karl heinz Buchegger schrieb:
> Aber in einem Technikerforum
> bist du mit so einem Verhalten ganz schnell unten durch.

Danke für den Tipp, glaube aber das sagst du mir nicht zum ersten mal.

Udo Schmitt schrieb:
> aber wahrscheinlich was alles zu lesen auch schon zu
> viel Arbeit.

hahahahha.

Udo Schmitt schrieb:
> Aha, die kennen sich aus.....ROFL muss ich mich jetzt verneigen?

Naja, also ich sage, laut mein Coding müsste alles hinhaun. Wenn 
allerdings nicht dann gehe ich dorthin wo ich das Modul gekauft habe und 
da rechnet man damit, dass der Support stimmt.

Udo Schmitt schrieb:
> der Superduperprogrammierer, aber einen 3Zeiler um einen
> Ringpuffer direkt zu leeren oder wie Karl Heinz oben einfach den Puffer
> leerlesen ist doch zuuuuuu viiiiil Arrrbeiiit und dauert so lange. Schon
> klar da reicht ein Bier nicht.

Wenn du die meinen Code anschgeschaut hättest, dann wüstest du, dass der 
Ringpuffer geleert wird.

Da reicht kein Bier bei solchen Diskussionen!

lg andy

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy S. schrieb:
> Wenn du die meinen Code anschgeschaut hättest, dann wüstest du, dass der
> Ringpuffer geleert wird.

Und wo genau ist dann das Problem, das überhaupt erst zu deiner Anfrage 
hier geführt hat?

Oliver

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.