Forum: Mikrocontroller und Digitale Elektronik Frage zum MPLAB


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael S. (misax)


Lesenswert?

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 ?

von Gasheizer (Gast)


Lesenswert?

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.

von Michael S. (misax)


Lesenswert?

weiss jemand die Antwort auf meine Frage ?

von Teo D. (teoderix)


Lesenswert?

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

von Michael S. (misax)


Lesenswert?

oder weiss vielleicht jemand in welchem File die __delay_ms Funktion 
deklariert ist ?

von Michael S. (misax)


Lesenswert?

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 ?

von Frank K. (fchk)


Lesenswert?

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

von Michael S. (misax)


Lesenswert?

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 
?

von Monk (roehrmond)


Lesenswert?

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
von Frank K. (fchk)


Lesenswert?

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

von Gasheizer (Gast)


Lesenswert?

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

von Axel S. (a-za-z0-9)


Lesenswert?

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
von Michael S. (misax)


Lesenswert?

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)

von Frank K. (fchk)


Lesenswert?

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
von Axel S. (a-za-z0-9)


Lesenswert?

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
von Volker S. (vloki)


Lesenswert?

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

von Axel S. (a-za-z0-9)


Lesenswert?

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 :)

von Michael S. (misax)


Lesenswert?

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 ?

von M. K. (sylaina)


Lesenswert?

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.

von Michael S. (misax)


Lesenswert?

Frage an Volker S. und Axel S.:
gehts oder gehts nicht ?

von XC8-Aufbohrer (Gast)


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

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?

von Michael S. (misax)


Lesenswert?

mich interessiert einfach nur ob das geht. und wenn ja, wie. es ist 
reines Interesse.

von M. K. (sylaina)


Lesenswert?

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.

von Monk (roehrmond)


Lesenswert?

Die wiederholte Fragestellung ist so dumm wie:
"Kann ich meine Wohnung kühlen, indem ich kaltes Wasser auf den Boden 
laufen lasse?"

von Volker S. (vloki)


Lesenswert?

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
von Kühl Fachmann (Gast)


Lesenswert?

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.

von Axel S. (a-za-z0-9)


Lesenswert?

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.

von Monk (roehrmond)


Lesenswert?

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.

von Volker S. (vloki)


Lesenswert?

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
Noch kein Account? Hier anmelden.