mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART RX funktioniert nach Abschalten von TX nicht mehr


Autor: Jakob B. (teddynator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Mal wieder ein UART Problem
leider habe ich hierzu im Forum noch nichts gefunden.

Der Code im Anhang funktioniert, solange der UART TX nicht abgeschaltet 
wird. (bis auf den einen Output der ja für TX verwendet wird) Da ich 
aber TX ebenfalls als Ausgang verwenden möchte habe ich versucht TX 
abzuschalten. Nun funktioniert aber auch das Empfangen der Daten nicht 
mehr und kein Ausgang wird geschaltet.

Vielleicht mag jemand von euch mal darüber schauen und mir sagen was ich 
hier falsch mache. Sorry für umständlichen programmierstiel. Bin leider 
kein Profi :)

Hardware: ATMEGA8

zum .c file: Code funktioniert wenn man die auskommentierten Teile dazu 
nimmt,
so wie er jetzt ist (also ohne diese Codeteile) nicht.

Vielen Dank schonmal

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volatile.  received.

Und nicht nur dort, sondern auch in der Verzögerungsschleife.

Autor: Jakob B. (teddynator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Volatile.  received.
>
> Und nicht nur dort, sondern auch in der Verzögerungsschleife.

was ist damit gemeint? Sorry kenn mich echt noch nicht so wahnsinnig gut 
aus.

Autor: Jakob B. (teddynator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, jetzt hat es funktioniert. Allerdings fehlt mir ein wenig das 
Verständnis warum es so funktioniert. Was bringt "volatile" genau?

hab ich das richtig verstanden dass die variable mit "volatile" jedes 
mal neu aus dem hauptspeicher geladen wird?
Das heißt dass diese Variable auch extern verändert werden kann (in 
meinem fall durch den uart empfang) und durch das neu laden bekommt das 
programm die änderung auch mit??

Warum hat dann das "alte" programm funktioniert

Will hier jemand Licht ins Dunkel bringen. Ich steh grad auf m Schlauch

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

Bewertung
0 lesenswert
nicht lesenswert

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

Bewertung
0 lesenswert
nicht lesenswert
Thomas B. schrieb:

> hab ich das richtig verstanden dass die variable mit "volatile" jedes
> mal neu aus dem hauptspeicher geladen wird?

genau.
volatile heisst für den Compiler, dass er keine Optimierungen damit 
machen darf. Insbesondere darf er nicht davon ausgehen, dass er aufgrund 
der Datenflussanalyse davon ausgehen darf, dass er den Inhalt der 
Variablen aufgrund der Vorgeschichte kennt.

> Das heißt dass diese Variable auch extern verändert werden kann (in
> meinem fall durch den uart empfang) und durch das neu laden bekommt das
> programm die änderung auch mit??

Exakt.

> Warum hat dann das "alte" programm funktioniert

reiner Zufall.
Wenn das Programm leicht anders aussieht, mag alles wieder ganz anders 
aussehen.

Autor: Jakob B. (teddynator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah klasse. Da hab ich ja wieder was dazu gelernt

Danke nochmal und Gute Nacht.
Glaub es ist längst zeit für mich zu schlafen :)

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.