Forum: Compiler & IDEs MEGA32 Globale Struktur?


von M. Gerlach (Gast)


Lesenswert?

Hallo Leute,

ich programmiere gerade einen mega32 mit pn2 und avrgcc3.3. Ich
benötige eine Struktur auf die alle Funktionen zugreifen können. Dazu
habe ich im main-Header eine Struktur deklariert und eine
Strukturvariable durch
.. extern xy; erzeugt.
leider haben meine Funktionen keinen Zugriff auf die Variable obwohl
ich allen den main-Header zur Verfügung gestellt habe.
Der compiler meckert
undifined reference to xy
Wer kann da weiterhelfen?

M.G:

von Werner B. (Gast)


Lesenswert?

extern struct axz xy; erzeugt nicht, sonder deklariert nur dass xy den
typ struct xyz  hat.

Du musst die variable natürlic noch irgendwo in einen c-file erzeugen,
eben ohne den "extern"

struct xyz  xy;

von OldBug (Gast)


Lesenswert?

Wenn es sich dabei um eine art Semaphore handelt, solltest Du diese
globale Struktur noch 'volatile' deklarieren und definieren.

von M. Gerlach (Gast)


Lesenswert?

Ah Danke an Herrn B.
Funktioniert!

von M. Gerlach (Gast)


Lesenswert?

@O

Das soll im Prinzip ein globaler Datenpuffer sein, von dem ich
problemlos mit allen Funktionen lesen(!) kann.

von OldBug (Gast)


Lesenswert?

Wird dieser Puffer niemals verändert?

von M. Gerlach (Gast)


Lesenswert?

Es werden zum Programmstart Daten aus dem EEPROM geladen und das wars.

von M. Gerlach (Gast)


Lesenswert?

Aber jetzt fällt mir gerade auf, dass ich noch ein zwei solcher Felder
gebrauchen könnte und da werden sich dann die Inhalte ändern.

@O
Sollte ich dann irgendetwas beachten?

von OldBug (Gast)


Lesenswert?

Wenn mehrere Funktionen darauf zugreifen, volatile machen.

von Rolf Magnus (Gast)


Lesenswert?

Nein. Nur wenn Interrupts drauf zugreifen, muß sie volatile sein.

von edvdoctor (Gast)


Lesenswert?

Volatile bedeutet nur, dass der Optimizer an der Variable keine
Optimierung vornimmt. Bietet sich also für Register an, die nicht nur
durch den Quellcode direkt verändert werden.

von OldBug (Gast)


Lesenswert?

Jetzt hab ich mir selbst ins Knie geschossen!

Ihr habt natürlich beide Recht...

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.