Symbolzuweisung in library

Gast #417452
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.

P.s.: Hab den gleichen Thread auch im µC Forum eröffnet, da ich mir
nicht sicher bin, wo er denn jetzt genau hingehört ?!

Gruß und Mahlzeit
Gast #417453
Lesenswert?

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

Welches Symbol ist undefiniert bzw. welcher Text wurde nicht ersetzt?
CLK, SDI oder PORTA? Du solltest dir die Ausgabe vom Präprozessor
anzeigen lassen und dann die Frage überdenken. Optionen beim GCC:

-E (nur Preprozessor laufen lassen)
und -o Ausgabedatei
Gast #417454
Lesenswert?

Hallo Stefan,
das erste Symbol, welches auftaucht, hier CS, bemäkelt er als undefined
symbol.
Die Ausgabe des Präprozessors werde ich mir mal anschauen. Es kann ja
auch sein, dass er in der Library auch keine Pre-Prozessor funktionen
unterstützt. Dann muss ich mir was anderes überlegen.
Persönliche Seite #417455
Lesenswert?

Anmerkung:

Vermeide es, von "library" zu sprechen, wenn Du nur eine Headerdatei
(*.h) meinst. Das hilft beim Verständnis Deines Problemes.

Eine Library (*.a bei gcc, *.lib bei anderen) ist etwas ganz anderes,
nämlich bereits fertig übersetzter Binärcode, der zu Deinem Programm
hinzugelinkt wird. Libraries werden nur vom Linker verarbeitet;
irgendwelche Präprozessoranweisungen haben dabei keinerlei
Auswirkungen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren