Forum: Mikrocontroller und Digitale Elektronik Symbolzuweisung in library


von Pinky (Gast)


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

von johnny.m (Gast)


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...

von Pinky (Gast)


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?

von Christian (Gast)


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.

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.