Hallo; gibt es ein Verzeichnis, in das man .C-Files einstellen kann, die dann beim Compilieren mit dem XC8-Compiler vom MPLAB automatisch mit herangezogen werden, ohne dass man sie unter Projects - Source Files explizit einbinden muss ? weiss das jemand ?
Da wird dann wohl
> automatisch
Muell gebaut.
Hat man Quellen, die als Bibliothek verwendet werden sollen,
dann baut man eine Library. Die sollte jeder Compiler/Linker
dann linken koennen. Moeglicherweise dient die Option dazu,
fuer das Debugging diese Quellen dann auch im Quellcode anzeigen
zu koennen.
Michael S. schrieb: > weiss jemand die Antwort auf meine Frage ? Hey! Wir sind KEIN Münzautomat! Dass das klar ist!³ Nein, nicht das ich wüste. Wozu auch und wie soll das funktionieren???
oder weiss vielleicht jemand in welchem File die __delay_ms Funktion deklariert ist ?
oder nochmal anders gefragt: gibt es ein Standard-Verzeichnis aus dem sich der Compiler irgendwelche Standard-Bibliotheken oder Standard-Files zieht, die für alle Projekte immer gleich ? Kennt sich einer so gut mit dem XC8-Compiler aus dass er mir diese Frage beantworten kann ?
Michael S. schrieb: > oder weiss vielleicht jemand in welchem File die __delay_ms Funktion > deklariert ist ? ./xc8/v#.##/pic/include/pic.h wird durch xc.h eingebunden. Unter ./xc8/docs/MPLAB_XC8_C_Compiler_User_Guide_for_PIC.pdf gibts auch eine Anleitung. Da darfst Du auch mal reinschauen, bevor Du hier fragst. -> Seite 456, Abschnitt 9.18.14 __delay_ms Builtin (xc8 Version 2.32) fchk
Danke schonmal für den Tip. Der xc.h ruft den pic.h auf und dieser den builtins.h. Dort wiederum steht der delay. Der delay ist als define definiert und wird aus der XTAL_FREQ errechnet. Wenn ich in die builtins.h einen Prototype für eine Funktion reinschreibe, wo muss ich dann den zugehörigen C-Code für diese Funktion reinschreiben, damit der Compiler dem Prototype den C-Code zuordnen kann ?
Michael S. schrieb: > Wenn ich in die builtins.h einen Prototype für eine Funktion > reinschreibe Mache das auf gar keinen Fall! Never ever editiert man irgendeine Standard Bibliothek. Die benutzt man so wie sie sind. Und schon gar nicht ändert man die builtins.h, denn diese enthält Prototypen für Funktionen, die der Compiler in Assembler generiert. Für diese Funktionen gibt es keinen C Quelltext.
:
Bearbeitet durch User
Michael S. schrieb: > Danke schonmal für den Tip. Der xc.h ruft den pic.h auf und dieser den > builtins.h. Dort wiederum steht der delay. Der delay ist als define > definiert und wird aus der XTAL_FREQ errechnet. > > Wenn ich in die builtins.h einen Prototype für eine Funktion > reinschreibe, wo muss ich dann den zugehörigen C-Code für diese Funktion > reinschreiben, damit der Compiler dem Prototype den C-Code zuordnen kann > ? Ganz schlechte Idee. Du schreibst da nichts rein. Punkt. Bei einem Update des Compilers sind Deine Änderungen nämlich wieder weg. Wenn Du etwas hinzufügen willst, machst Du das in Deinem eigenen Projekt, wo Du ein .c und ein .h reinwirfst. Das ist die korrekte Vorgehensweise für .c/.h Dateien. Alternativ erzeugst Du ein Library-Projekt und packst da deine .c und .h Dateien (das können mehrere oder sogar viele sein) rein. Dann erzeugst Du eine .a Link-Library. Du hast dann optimalerweise EINE .h, die Falle Deklarationen für Deine Library enthält. Dann erzeugst Du Dir ein privates lib und ein privates include Verzeichnis. Beide kannst Du in den Projekteigenschaften eintragen, damit die Dateien auch gefunden werden. Im Projekt hinzufügen musst Du die Datein trotzdem, damit das make die passenden Abhängigkeiten erzeugen kann und überhaupt weiß, dass er die Library linken muss. Automatisch geht da gar nichts. fchk
> Im Projekt hinzufügen musst Du die Datein trotzdem, damit das > make die passenden Abhängigkeiten erzeugen kann und überhaupt weiß, dass > er die Library linken muss make muss fuer eine vorhandene Library ueberhaupt keine Abhaengigkeiten erzeugen. Das koennte es auch gar nicht. Man muss make lediglich das Vorhandensein von Bibliotheken bekanntmachen. Damit es die beim Linkeraufruf dazu linkt. Es gibt z.B. genug kommerzielle Libs fuer die kein Quelltext dabei ist.
Michael S. schrieb: > Der xc.h ruft den pic.h auf und dieser den builtins.h. > Dort wiederum steht der delay. Nein. Ein Headerfile (dafür steht das .h) ruft gar nichts auf. Im C Quelltext steht eine #include Anweisung dafür. Technisch führt diese Anweisung der C-Präprozessor aus. Und der ersetzt einfach nur die #include-Anweisung durch den Inhalt des Files. Wenn nötig auch rekursiv. > Wenn ich in die builtins.h einen Prototype für eine Funktion > reinschreibe, wo muss ich dann den zugehörigen C-Code für diese Funktion > reinschreiben, damit der Compiler dem Prototype den C-Code zuordnen kann > ? Da ist kein C-Code zugeordnet. Das Include-File heißt nicht umsonst builtins.h (built in = eingebaut). Die entsprechenden Funktionen sind im Compiler eingebaut. Er erzeugt den zugehörigen Maschinencode idR. direkt am Ort des Aufrufs.
:
Bearbeitet durch User
Benutzt der XC8 denn überhaupt irgendein C-Source-File, das er standardmäßig bei jedem Aufruf mit compiliert und mit dazu linkt, und wenn ja, wie heißt diese Datei und wo steht sie ? (analog der Arduino IDE, die ja automatisch immer die main.cpp mit dazu compiliert und linkt)
Michael S. schrieb: > Benutzt der XC8 denn überhaupt irgendein C-Source-File, das er > standardmäßig bei jedem Aufruf mit compiliert und mit dazu linkt, und > wenn ja, wie heißt diese Datei und wo steht sie ? nein. Ist auch anderswo nicht üblich. fchk
:
Bearbeitet durch User
Frank K. schrieb: > Michael S. schrieb: >> Benutzt der XC8 denn überhaupt irgendein C-Source-File, das er >> standardmäßig bei jedem Aufruf mit compiliert und mit dazu linkt, und >> wenn ja, wie heißt diese Datei und wo steht sie ? > > nein. Ist auch anderswo nicht üblich. Jein. Es gibt zwar keinen C-Code jedes mal compiliert und dazu gelinkt wird, aber es gibt Objectcode, der zu jedem [1] Programm dazu gelinkt wird. Der übliche Name ist crt0.o, zumindest für GNU cc und ld. Andere Compiler können das natürlich auch anders nennen. crt steht für C Run Time library. Es ist der Code, der noch vor main() ausgeführt wird. Siehe auch https://en.wikipedia.org/wiki/Crt0 [1] crt0.o wird nicht dazu gelinkt, wenn die Kommandozeilenoption -nostartfiles verwendet wird.
:
Bearbeitet durch User
Axel S. schrieb: > Jein. Es gibt zwar keinen C-Code jedes mal compiliert und dazu gelinkt > wird, aber es gibt Objectcode, der zu jedem [1] Programm dazu gelinkt > wird. Jein ;-) " 4.3.2.1 Runtime Startup Code Generation Rather than the traditional method of linking in generic, precompiled runtime startup routines, the MPLAB XC8 C Compiler determines what runtime startup code is required from the user’s program and then generates this code each time you build your project. ... "
Volker S. schrieb: > > Jein ;-) > 4.3.2.1 Runtime Startup Code Generation > Rather than the traditional method of linking in generic, precompiled > runtime startup routines, the MPLAB XC8 C Compiler determines what > runtime startup code is required from the user’s program and then > generates this code each time you build your project. Again what learned :)
Was bedeutet das bezüglich meiner Frage ? Kann ich irgendwo C-Code abstellen (Funktionen) und dann dem Compiler im MPLAB mitteilen dass er diesen Code immer mit dazu compilieren soll für alle meine Projekte ohne dass ich das explizit nochmal irgendwo beim Projekt angeben muss ?
Michael S. schrieb: > Hallo; > gibt es ein Verzeichnis, in das man .C-Files einstellen kann, die dann > beim Compilieren mit dem XC8-Compiler vom MPLAB automatisch mit > herangezogen werden, ohne dass man sie unter Projects - Source Files > explizit einbinden muss ? weiss das jemand ? Und wenn du das Projekt mal weiter gibst guckt der Empfänger recht sparsam aus der Wäsche wenn er sich fragt, woher die Funktion meineNeueWelt(newStuff) her kommt und was die macht. Was man selbst "gebastelt" hat gehört auch immer selbst mit eingebunden damit man das auch selbst in 10 Jahren noch nachvollziehen kann, warum man es eingebunden hat und was es tut.
> gehts oder gehts nicht ?
Es ist der Sinn eines ComNpilers, dass alles moegliche geht.
Nur wenn du schon nicht weisst wie, solltest du es wohl besser lassen.
Michael S. schrieb: > Was bedeutet das bezüglich meiner Frage ? > Kann ich irgendwo C-Code abstellen (Funktionen) und dann dem Compiler im > MPLAB mitteilen dass er diesen Code immer mit dazu compilieren soll für > alle meine Projekte ohne dass ich das explizit nochmal irgendwo beim > Projekt angeben muss ? Nein, nein, und nochmal nein. fchk
Michael S. schrieb: > Frage an Volker S. und Axel S.: > gehts oder gehts nicht ? Frage an Michael: Warum soll man sowas wollen? Damit du bei einem neuen Projekt 2 Zeilen sparst?
mich interessiert einfach nur ob das geht. und wenn ja, wie. es ist reines Interesse.
Michael S. schrieb: > mich interessiert einfach nur ob das geht. und wenn ja, wie. es ist > reines Interesse. Wie oft willst du jetzt noch hören, dass es nicht geht? Du musst immer angeben, was eingebunden werden soll. Das kann man an unterschiedlichen Stellen machen aber man muss es immer machen.
Die wiederholte Fragestellung ist so dumm wie: "Kann ich meine Wohnung kühlen, indem ich kaltes Wasser auf den Boden laufen lasse?"
Michael S. schrieb: > Frage an Volker S. und Axel S.: > gehts oder gehts nicht ? Keine Ahnung. Vielleicht schon, wenn du genau weißt was du tust und irgendwelche Vorlagen für Make in MPLABX findest und in denen rum murkst. Macht für mich, wie für anscheinend alle außer dir aber einfach keinen Sinn.
:
Bearbeitet durch User
Steve van de Grens schrieb: > "Kann ich meine Wohnung kühlen, indem ich kaltes Wasser auf den Boden > laufen lasse?" Auch das geht: Man lässt einfach die Tür vom Kühlschrank offen.
Michael S. schrieb: > Frage an Volker S. und Axel S.: > gehts oder gehts nicht ? Beantworte du doch erstmal die Frage: was soll das? Ein C-Quellfile kannst du doch auch im MPLAB(X) problemlos dazu legen, mit compilieren und dazu linken. Bis zum Beweis des Gegenteils gehe ich davon aus, daß das hochgradiger Schwachsinn ist.
Vielleicht will er seine Datei nicht in mehrere Projekte kopieren. Dafür gibt es Hardlinks (auch in Windows), ich würde aber auch das lieber nicht tun.
Steve van de Grens schrieb: > Vielleicht will er seine Datei nicht in mehrere Projekte kopieren. Das sollte man auf jeden Fall sein lassen. Ist auch völlig unnötig. In mehreren Projekten verwendete Files müssen doch nicht im Projektverzeichnis sein. Sollten sie prinzipiell auch nicht!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.