Forum: Mikrocontroller und Digitale Elektronik ARM GCC - int-funktion liefert verschiedene Werte aus Main und C-File


von mws_master (Gast)


Lesenswert?

Hallo Zusammen,

ich bin am Verzweifeln mit dem ARM-GCC:

Ich habe 3 Source-Files:

*main.c
*file1.c
*file2.c

in file1.c befindet sich eine Interrupt Service Routine die eine 
Variable ändert, die als

static volatile uint8_t variable

definiert ist. Das file1.c enthält auch eine uint8_t-Funktion die den 
Variablenwert zurückliefern soll:

uint8_t variable(void) {
  return variable;
}

Wenn ich die Funktion aus der Main aufrufe, dann funktioniert alles.
Wenn ich die Funktion aber aus einer Funktion innerhalb von file2.c 
aufrufe, dann kriege ich immer 0 zurück. Egal was ich einstelle.

Compiler Optimization is Os, da der Platz schon ziemlich eng ist.

Was habe ich hier übersehen?

Danke für die Hilfe
mws

von foobar (Gast)


Lesenswert?

> file1.c:
> static volatile uint8_t variable
>
> uint8_t variable(void) {
>   return variable;
> }

Das sollte mindestens zwei Fehler/Warnungen geben.  Außerdem werden 
static Variablen nicht exportiert und sind nur in dem einen File 
verfügbar - hast wohl in dem anderen File ne weitere Variable mit 
gleichem Namen definiert.

von foobar (Gast)


Lesenswert?

Upps - vergiss den zweiten Satz, spielt hier keine Rolle, da du die 
Funktion benutzt und nicht direkt die statische Variable.

Poste am besten den tatsächlichen Code.

von Rolf M. (rmagnus)


Lesenswert?

mws_master schrieb:
> definiert ist. Das file1.c enthält auch eine uint8_t-Funktion die den
> Variablenwert zurückliefern soll:
>
> uint8_t variable(void) {
>   return variable;
> }

Ist die Funktion auch im Header deklariert?

von Dr. Sommer (Gast)


Lesenswert?

Zeige ein Minimal-Beispiel mit dem richtigen Code und die 
Disassembler-Ausgabe davon.

von RP6conrad (Gast)


Lesenswert?

Wen in ein anderes File, soll das diese variable doch als "extern" 
definiert werden ! Sonst wird einfach eine neue variable declariert.

von Dr. Sommer (Gast)


Lesenswert?

RP6conrad schrieb:
> Wen in ein anderes File, soll das diese variable doch als "extern"
> definiert werden !

Darum geht es nicht. Er hat ja eine Getter-Funktion, welche eine solche 
globale Variable überflüssig macht.

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.