www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Symbolzuweisung in library


Autor: Pinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich programmiere derzeit einen ATtiny26 mit CodeVision C-Compiler. Mein
Problem ist, denke ich, im wesentlichen ein reines C Problem. Ich
verwende einen DAC12 Bit. Für die Ansteuerung des DACs schreibe ich
eine Library. Nun möchte ich diese Library später vielleicht in anderen
Projekten verwenden, deshalb wollte ich folgendermaßen vorgehen:
In der Library werden nur symbolische Zuweisungen gemacht, z.B.
CLK=1;
SDI=0;
CLK=0;

Noch vor dem includen der Library muss man dann den Symbolen den
richtigen PORT zuweisen, also insgesamt in etwa so:

#define CLK PORTA.7
#define SDI PORTA.6
#include <dac.h>

Wenn ich nun kompiliere, dann bekomme ich die Fehlermeldung "undefined
Symbol", also hat er den Text nicht ersetzt.

Wie bekomme ich dieses Problem in den Griff?

Stehen die define Befehle in der Library geht es. Dies ist aber nicht
Sinn und Zweck, da ich die Library bei anderen Projekten mit anderer
Pinbelegung auch verwenden möchte.

Gruß und Mahlzeit

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutung: Wenn Du die io.h vor den #defines #includest, sollte es
eigentlich keine Probleme geben, vorausgesetzt, der Rest stimmt. Da Du
keinen vollständigen Code, geschweige denn, die vollständige
Fehlermeldung schickst, kann ich da nicht mehr zu sagen. Kann also nur
annehmen, dass sich die Fehlermeldung darauf bezieht, dass zum
Zeitpunkt der #defines PORTA nicht bekannt ist...

Autor: Pinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Johnny,
ich include folgendermaßen:

#include <attiny26.h>  //hier sind auch die Ports definiert
#define CLK PORTA.7
#define CS  PORTA.6
...
#include <dac.h>

Die Fehlermeldung vollständig: "Error in library c:\...; line 21,
undefined symbol 'CS'"
D.h. er hat ja offensichtlich CS nicht durch PORTA.6 ersetzt?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Library ist doch bestimmt in einer eigenen C-Datei? Der Compiler
compiliert jede C-Datei einzeln. #defines, die Du in der C-Datei Deines
Hauptprogramms machst, haben demnach natürlich keine Auswirkung auf die
C-Datei Deiner Library. Du musst die #defines schon in Deiner Library
machen oder in einer Header-Datei, die von Deiner Library includiert
wird oder per Kommandozeilenoption an den Compiler übergeben, wenn die
C-Datei der Library compiliert.

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.