mikrocontroller.net

Forum: Compiler & IDEs MEGA32 Globale Struktur?


Autor: M. Gerlach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: OldBug (Gast)
Datum:

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

Autor: M. Gerlach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah Danke an Herrn B.
Funktioniert!

Autor: M. Gerlach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@O

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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird dieser Puffer niemals verändert?

Autor: M. Gerlach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es werden zum Programmstart Daten aus dem EEPROM geladen und das wars.

Autor: M. Gerlach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn mehrere Funktionen darauf zugreifen, volatile machen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Nur wenn Interrupts drauf zugreifen, muß sie volatile sein.

Autor: edvdoctor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt hab ich mir selbst ins Knie geschossen!

Ihr habt natürlich beide Recht...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.