Hallo Ich schreibe gerade eine Routine in C (Codevision). Die Routine wird in einer eigenen Datei gespeichert, die ich dann im Hauptprogramm einfüge (#include des Headers und eingebunden im Projekt). Die Routine beinhaltet ein Flag-Register. Da die Routine von einem Interrupt aufgerufen werden soll (kein Rückgabewert möglich), möchte ich auf den Zustand des Flag-Registers auch vom Hauptprogramm aus zugreifen können. Das klappt aber nicht! Warum nicht?! Ich habe den Eindruck, dass das Flag-Register (wie gesagt, in einer anderen Datei angelegt) nicht im Hauptprogramm existiert. Kann das sein? Fehlermeldungen gibt es aber keine! Übrigens: Im Simulator funktioniert seltsamerweise alles!! Ich hoffe, ich konnte mein Problem verständlich machen (ich kann auch gerne Code posten). Weiß hier jemand Rat? Grüsse, Steffen P.s.: Ich hab auch schon mit dem Schlüsselwort "extern" rumgespielt, kam aber auch damit nicht weiter!
Probier mal die Variable mit "volatile" anzulegen vielleicht klappt es dann
Wenn ein Stück Software im Simulator das tut was es soll, im richtigen Leben aber nicht, ist oft ein Seiteneffekt der Grund. Interrupt-Routinen, fremde Programmteile, Stacks usw. sind typische Kandidaten, die das Flag unbeabsichtigt überschreiben oder ändern könnten. cu
Danke für die beiden Tipps! Volatile hat leider keine Veränderung gebracht. Der Code wird genau gleich wie vorher übersetzt und das Problem bleibt logischerweise auch. Das mit den Seiteneffekten erscheint mir logisch. Es ist aber so, dass ich in der Interrupt-Routine meine externe Routine aufrufe und nach dem Aufruf wieder in der Interrupt-Routine zurücklande. Das Interessante dabei ist folgendes: Wenn ich in der vom Interrupt aufgerufenen Routine mein Flag-Register teste, klappt alles. In der aufrufenden Interrupt-Routine, in der ich dann hinterher ja lande, klappts mit einem Mal aber nicht mehr! Dazwischen liegt nur der Rücksprung!! Können das trotzdem noch Seiteneffekte sein? Ich steh total auf dem Schlauch und komm ohne Hilfe nicht weiter :-( Ich hoffe, ihr habt noch ein paar Tipps für mich! Grüsse, Steffen
Halt Kommando zurück! Ich hab den Fehler... Der Fehler ist ein ganz anderer. Ich programmiere noch nicht so lange in C. Ich dachte, man könne Bit-Variablen mit dem Schlüsselwort "sfrb" deklarieren. In Wirklichkeit ist das jedoch nur für IO-Register möglich, für alles andere mus man "bit" nehmen. Sowas blödes, hat viel Zeit gekostet. Keine Ahnung, warum im Simulator alles funktionierte. Vielen Dank für Eure Ratschläge! Grüsse, Steffen
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.