Forum: Mikrocontroller und Digitale Elektronik Mehrere structs anlegen / avr gcc


von Hallo (Gast)


Lesenswert?

Hallo,

ich habe eine Libary, welche ich in der main.c nutzen möchte.


libary.h
1
//...
2
struct motorCfg {
3
  uint8_t minFwSpeed;
4
  uint8_t maxFwSpeed;
5
  uint8_t minRwSpeed;
6
  uint8_t maxRwSpeed;
7
  uint8_t actSpeed;
8
  uint8_t dir;
9
  };
10
/...

main.c
1
// Anlegen von structs
2
struct motorCfg motor1;
3
motor1.actSpeed = 200;

Das geht leider so nicht. Ich brauche 3-4 Configs, deshalb auch das 
struct.

Ich habe dieses Buch als Druckvariante, dort wird es leider nicht 
erklärt.

[/code]

von Tom K. (ez81)


Lesenswert?

Hallo schrieb:
> Das geht leider so nicht

Das ist keine Fehlerbeschreibung. Wenn Du etwas ausführlicher wirst, 
könnte man helfen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hallo schrieb:
> Das geht leider so nicht.

Was meinst Du damit? Gibt es eine Fehlermeldung des Compilers?

Dann sieh Dir in Deinem C-Buch mal an, wie man Strukturvariablen 
initialisiert -- was Du da gemacht hast, ist keine Initialisierung, 
sondern eine Zuweisung.

Und wenn Du mehrer Strukturvariablen verwenden möchtest, könntest Du Dir 
in Deinem C-Buch mal das Kapitel über Arrays ansehen.

Auch Arrays können initialisiert werden, und auch Arrays aus Strukturen.

Übrigens ist eine .h-Datei keine "Libary" (auch keine Library), 
sondern nur eine Headerdatei. Eine Library enthält vorcompilierten Code, 
der zu Deinem Programm vom Linker hinzugefügt wird.

von Hallo (Gast)


Lesenswert?

1
// lib.h
2
3
struct name {
4
  uint8_t a;
5
  uint8_t b;
6
  uint8_t sum;
7
};
8
9
void sum_ab(struct name *struct_ptr);
1
// lib.c
2
void ab(struct name *struct_ptr)
3
{
4
  struct_ptr->sum = struct_ptr->a + struct_ptr->b;
5
}
1
// main.c
2
3
int main(void)
4
{
5
  struct name t;
6
  t.a = 10;
7
  t.b = 20;
8
  ab(&t);
9
}

Wäre das soweit korrekt? Keine Compiler-Warnungen.

von Oliver W. (pilzkopf)


Lesenswert?

Hallo schrieb:
> Wäre das soweit korrekt? Keine Compiler-Warnungen.

Schöner wäre vielleicht noch:

main.c
1
int main(void)
2
{
3
  struct name t = {
4
    .a = 10,
5
    .b = 20
6
  }
7
  ab(&t);
8
}

Das kann der Compiler als Initialisierung verstehen und uU besser 
optimieren.
In deinem Beispiel ändert sich der Wert von .a und .b, in meinem nicht 
;)

von Frank (Gast)


Lesenswert?

void sum_ab() != void ab()

von KKarlo (Gast)


Lesenswert?

Frank schrieb:
> void sum_ab() != void ab()

Wenn C-ler sprechen könnten und vielleicht sogar ganze Sätze bilden 
könnten.

von Oliver W. (pilzkopf)


Lesenswert?

KKarlo schrieb:
> Wenn C-ler sprechen könnten und vielleicht sogar ganze Sätze bilden
> könnten.

Brauch man in der Mathematik auch nicht und viel eindeutiger geht sein 
Hinweis doch nicht. Die Stelle auf 17 Zeile Code zu finden trau ich 
allen zu.

von KKarlo (Gast)


Lesenswert?

Oliver W. schrieb:
> Brauch man in der Mathematik auch nicht und viel eindeutiger geht sein
> Hinweis doch nicht.

Für mich ist das ein Ausschluß und nicht sehr eindeutig.

Brauch_ man in der Mathematik auch nicht und viel eindeutiger geht sein
Hinweis doch nicht. Die Stelle auf(in) 17 Zeile_ Code zu finden trau_ 
ich allen zu.

Auch C-ler? Wahrscheinlich kein Mathematiker; s.o.

von Oliver W. (pilzkopf)


Lesenswert?

KKarlo schrieb:
> Für mich ist das ein Ausschluß und nicht sehr eindeutig.

Für die meisten Mathematiker (und ich glaube fast alle Programmierer) 
ist das ein Nicht-Gleich, also ein ≠ ;)

KKarlo schrieb:
> Brauch_ man in der Mathematik auch nicht und viel eindeutiger geht sein
> Hinweis doch nicht. Die Stelle auf(in) 17 Zeile_ Code zu finden trau_
> ich allen zu.

Rechtschreibnazi ;) (Ist kein Vorwurf, ich weiß das ich leider viel zu 
oft während des Tippens die deutsche Rechtschreibung vernachlässige).

Nun wirds aber OT, btt.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Oliver W. schrieb:
> Ist kein Vorwurf, ich weiß das ich leider viel zu oft während
> des Tippens die deutsche Rechtschreibung vernachlässige.

Lbaser beiblt Txet acuh ktloepmt onhe Rchetsehrcibnug :-)

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.