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
Volatile. received. Und nicht nur dort, sondern auch in der Verzögerungsschleife.
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.
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
1 | volatile char received = 0; |
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenaustausch_mit_Interrupt-Routinen
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.