mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik extern struct ind Funktionen anlegen


Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn ich eine Variabel global verwenden will, wird sie zuerst in der 
main.c definiert:

uint8_t update=0;

Wenn ich diese in einem anderen c-File verändern will muss ich sie mit

extern uint8_t update;

einbinden. Das funktioniert auch wie gewünscht.

Wie kann ich dieses nun bei dem Datyntyp struct machen ?

Als Beispiel habe ich in main.c eine Struktur angelegt:

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;


Grüße

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Achim,

Du definierst

uint8_t update=0;

in Deiner main.c

Danach erstellst Du ein header file main.h in dieses schreibst Du

extern uint8_t update;

Nun erstellst Du ein neues C-File zB. Neues_File.c

in dieses includest Du das main.h

include <main.h>


....
Code
...

Damit ist dem Neues_File.c bekannt das update schon definiert ist und Du 
kannst es benutzen.

Das wars

Tom

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mach das immer so:

In einer main.h

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
};

extern struct clock time;

In main.c

struct clock time;

In deiner *.c
#include "main.h"

Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht mir eben und den Datentyp struct.

Das Beispiel war:

struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;


Leider kann ich in einem anderen c-File nicht einfach

extern struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
}time;

schreiben.

Autor: achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Deklarationen immer ohne .h Files gemacht.

Also ganz einfach:


In der main.c :

uint8_t update=0;

Und im anderen c-File:

extern uint8_t update;


Gibts es da kein Äquivalent für structs ?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gibts es da kein Äquivalent für structs ?

Nein, deine *.c Datei weiss ohne Headerdatei
ja nicht wie das struct aussieht.

Autor: Lupuz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
typedef? und dann über extern drauf zu greifen?

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
main.h:
//struct bechreiben
struct  clock{
  uint8_t hr;
  uint8_t min;
  uint8_t sec;
};
/* wahlweise mit typedef das 'struct' loswerden:
typedef struct clock clock_t;
*/
// Die externe Variable vom Typ "struct clock" deklarieren
extern struct clock the_real_clock;
main.c:
#include "main.h"
/* Die Variable "the_real_clock" definieren (d.h. GENAU EINMAL initialisieren): */
struct clock the_real_clock = {0,30,3};
extra.c:
#include "main.h"
//...
So steht's zumindest im Buch ;)
hth, Jörg

Autor: C-Buch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal in einem C-Buch oder C-Tutorial geschaut?

Gott gib uns mehr Verstand.

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.