Hallo zusammen! Ich habe ein STK 500 Board mit einem At90s8515 drauf. Ich möchte über Uart Zeichenketten einlesen und je nach Befehl soll was ausgeführt werden. z.b wenn ich im Terminal "LED1 an" soll er eine beliebige led einschalten. Ich habe versucht zeichenketten mit getchar, getstring und strcmp und co einzulesen und auszuwerten aber dies klappt nicht. Kann mir da jemand weiterhelfen? Ich habe schon hier in den Foren gesucht aber leider nix gefunden-
Karsten, fang mal erstmal an saemtliche globalen Variablen, die von der interrupt Routine modifiziert werden, als volatile zu deklarieren. Ansonsten kommt der compiler auf die Idee, die Dinger wegzuoptimieren.
jau danke jetzt klappt der Vergleich:). Was hat das auf sich mit volatile?? Heißt das wenn ich kein volatile benutze der compiler die globalen Variabeln irgendwo zuordnet? Sollte ich generell volatile für globale Variabeln nutzen??
volatile sagt dem compiler, die variable kann ausserhalb des normalen Programmablaufs modifiziert werden. Der Compiler muss dann saemtliche Optimierungen des Zugriffs auf diese Variable unterlassen. Wenn du die Variable auf 0 initialisierst und im main dann auf != 0 checkst optimiert der compiler normalerweise das ganze Konstrukt weg, weil das Hauptprogramm die Variable nicht modifiziert, und die komische Routine mit dem Namen interrupt() wird ja seiner Meinung nach garnicht aufgerufen. Mit volatile gewoehnst du ihm das ab.
Nachzulesen unter : http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts Topic "Datenaustausch mit Interrupt-Routinen"
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.