Forum: PC-Programmierung 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.

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

von Stefan (Gast)


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

von Pinky (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Stefan (Gast)


Lesenswert?

Das Symbol sehe ich aber in deinem fehlerproduzierenden Quelltext nicht.


Hast du inzwischen einen Weg gefunden, um dir die Präprozessor-Ausgabe
anzusehen?

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.