Gast
#173378
Hallo, hab hier ein recht kompliziert zu beschreibendes Problem mit dem C51-Linker: Ich hab mir eine Bibliothek für die serielle Schnittstelle geschrieben, die ich nun austesten möchte. Die globalen Variablen, die für die Bibliothek nötig sind, sind nicht in der Bibliothek enthalten, sondern in einem eigenen C-File definiert. Die entsprechenden Deklarationen stehen im H-File zur Bibliothek, mit einem EXTERN Verweis. Das mach ich, weil ich sonst jedesmal die Lib neu compilieren müsste, wenn ich z.B. den Port-Pin für RTS/CTS geändert habe oder ich die Buffergröße ändere. Aus dem gleichen Grund sind die globalen Variablen NICHT Bestandteil der Lib. Die Lib selbst lässt sich ohne Fehler compilieren! So, nun zu meinem Problem: Ich habe nun ein neues Projekt angelegt, in dem ich die Lib verwende. Ich wollte nun in diesem neuen Projekt einfach die in der Lib enthaltenen Funktionen austesten. Aber das funktioniert nicht, ich bekomme immer Linker-Fehler (Fehlerbeschreibung weiter unten). Im H-File zur Lib habe ich die Definition, welche Port-Pins ich für die Verwendung der Handshake-Leitungen verwenden möchte: #define PORT_CTS P3^2 #define PORT_RTS P3^4 Diese Defines werden in einer externen C-Datei (also nicht Bestandteil der Lib!) mit den Variablen-Deklarationen verwendet: sbit btCTS = PORT_CTS; sbit btRTS = PORT_RTS; In der H-Datei wiederum mache ich die Variablen bekannt: extern bit btCTS; extern bit btRTS; Die Interrupt-Funktion ist NICHT Bestandteil der Lib, weil einige der Derivate für die SPI-Schnittstelle die gleiche Einsprung-Adresse haben wie die normale serielle Schnittstelle. Wenn ich jetzt compiliere, kommt für das Interrupt-Modul für die Bits btCTS und btRTS jeweils die Linker-Fehlermeldung *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL und *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL. Ich habe auch im Interrupt die H-Datei eingebunden. Genauso gehören das Variablen- und das Interrupt-Modul zum Projekt. Puh, ich hoffe, ich konnte das Problem einigermassen verständlich rüberbringen... Wo liegt mein Fehler? Danke Gruß Ralf