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


von Jakob B. (teddynator)


Angehängte Dateien:

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

von Hc Z. (mizch)


Lesenswert?

Volatile.  received.

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

von Jakob B. (teddynator)


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.

von Jakob B. (teddynator)


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

von Karl H. (kbuchegg)


Lesenswert?


von Karl H. (kbuchegg)


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.

von Jakob B. (teddynator)


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 :)

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
Noch kein Account? Hier anmelden.