www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem Makro funktionsweise


Autor: mxt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich arbeite mich gerade in fremdcode ein und bin auf folgendes 
gestoßen:
typedef struct
{
  uint32 shot;
  uint8  active;
}my_Struct;

#define def_timer_1ms(timer_Id) my_Struct timer_Id

Im code wird das nun so verwendet
void test (void)
{
   def_timer_1ms(my_timer_id);
   variable = function(my_timer_id);
}

my_timer_id wird niergends definiert.

Mein Verständnis ist jetzt, dass my_timer_id über das makro definiert 
wird?
Wenn ja, verstehe ich nicht genau was in der variablen drin steht.
Ich hätte jetzt eine #define wie folgt erwartet:
#define def_timer_1ms(timer_Id)  {timer_Id.shot=variable; timer_Id.active=TRUE;}

Gibt es hierzu eine kurze erklärung oder literatur?

Ich danke euch schonmal für die Hilfe :-)

gruß
mxt

Autor: tzzazicki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mxt schrieb:
> Gibt es hierzu eine kurze erklärung oder literatur?

In jedem brauchbaren C-Buch

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>my_timer_id wird niergends definiert.

Doch. Es wird definiert. Schau Dir mal Deinen Code an.

typedef struct
{
  uint32 shot;
  uint8  active;
}my_Struct;

#define def_timer_1ms(timer_Id) my_Struct timer_Id

Das #define sagt, das an jeder Stelle im Sourcecode das auftreten von 
def_timer_1ms mit parameter timer_Id durch my_Struct timer_Id ersetzt 
wird.

In Deinem Quellcode
void test (void)
{
   def_timer_1ms(my_timer_id);
   variable = function(my_timer_id);
}

tritt genau def_timer_1ms auf.
Also wird es ersetzt durch
void test (void)
{
   my_Struct my_timer_id;
   variable = function(my_timer_id);
}

Damit ist my_timer_id auch definiert.
Das ist genau die Funktionsweise eines Makros.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hingegen fehlt, falls Du das nicht schon weisst ist die Definition 
von variable und function.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier:
#define def_timer_1ms(timer_Id)  {timer_Id.shot=variable; timer_Id.active=TRUE;}
Ergibt ja nicht die Definition einer Variablen sondern das setzte von 
Strukturelementen. Das setzt aber die Definition voraus.

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.