Forum: Mikrocontroller und Digitale Elektronik Variablen in C aus einer in die andere Datei übergeben?


von Steffen (Gast)


Lesenswert?

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!

von Tobias (Gast)


Lesenswert?

Probier mal die Variable mit "volatile" anzulegen vielleicht klappt es
dann

von Der Elektrische Reiter (Gast)


Lesenswert?

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

von Steffen (Gast)


Lesenswert?

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

von Steffen (Gast)


Lesenswert?

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