mikrocontroller.net

Forum: Compiler & IDEs #define-Übergabe an Bibliotheksfunktion


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Um meinen Code einfacher aber trotzdem dynamisch zu gestalten, will ich 
oft benötigte Funktionen in eine Bibliothek packen. Nun habe ich das 
Problem, dass variable Werte beim vorcompilieren der Funktionen nicht 
festgelegt sind und deswegen beim compilieren Fehler auftreten.

Der konkrete Fall sieht so aus:
Meine Hauptroutine (main.c) ruft eine Funktion auf:
#include "lib.h"
#define ADDRESS 0x22

int main(void)
{
 init_controller();
 ...
}

Das Symbol ADDRESS wird wegen der Präprozessor-Direktive durch 0x22 
ersetzt.
Die Funktion "init_controller" könnte nun so aussehen:
void init_controller();
{
 ...
 set_address(ADDRESS);
 ...
}

Hier soll also erst das Symbol "ADDRESS" an eine weitere Funktion 
übergeben werden.
Die Funktion "set_address" wiederum im Detail:
void set_address(int addr)
{
  ...
}

Um eine Bibliothek zu erstellen, muss ich die Funktionen 
"init_controller" und "set_address" vorcompilieren. "ADDRESS" ist aber 
zur Entwicklungszeit noch unbekannt -> somit spuckt der Compiler einen 
Fehler aus. Wie kann ich das umgehen?

Ich könnte nun schon in der Hauptroutine "ADDRESS" als int festlegen und 
in der entsprechenden Funktion mit 'extern' verwenden. Mir wären aber 
defines wesentlich lieber.

Vielen Dank für eure Anregungen und Tipps!
Daniel

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übergebe einfach init_controller die Adresse auch als Parameter,
also:
void init_controller(int addr);
{
 ...
 set_address(addr);
 ...
}
und:
#include "lib.h"
#define ADDRESS 0x22

int main(void)
{
 init_controller(ADDRESS);
 ...
}

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.