INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bedingte Compilierung von Extern
23.11.2020, 19:30
Beitrag #9
RE: Bedingte Compilierung von Extern
Funktioniert jetzt.

Danke für die Unterstützung! Smile

Mein Konstrukt sieht jetzt so aus:

Datei#1
Code:
    #if not defined(_meinWert_)
        #define _meinWert_ 4
    #endif

und in der Datei#2:
Code:
#define _meinWert_ 40
#include <Datei#1>

Man war das schwer...

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 19:35
Beitrag #10
RE: Bedingte Compilierung von Extern
Und wo realisierst Du jetzt die Abhängigkeit vom Prozessor, die Du eigentlich wolltest?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2020, 21:35
Beitrag #11
RE: Bedingte Compilierung von Extern
Beim Prozessor geht es vor allem darum, wieviel Platz dort - noch - zur Verfügung steht. Das ist natürlich vom RAM abhängig. Der ist naturgemäß beim Arduino UNO weniger, als beim einem nodeMCU 1.0.

Bei einem nodeMCU kann ein größeres Aray genutzt werden, als beim UNO. Wieviel das aber sein wird, ist nicht klar. Das Array sollte nur möglichst groß wählbar sein. Wie groß das em Ende wird, hängt vom Programm und vom Speicherplatzbedarf des Codes ab. Deshalb muss ich das auch nicht zusätzlich noch nach Prozessor festlegen.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 06:39 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 06:42 von Nichtraucher.)
Beitrag #12
RE: Bedingte Compilierung von Extern
Gestern habe ich ich mich sehr lange nochmals damit beschäftigt, was diese #define - Werte anbelangt. Weil ich einem Anschein aufgesessen bin. Eine Gegenprüfung, wie folgt, wirft Meldungen aus, dass "Makro" in "lib1" nicht definiert ist.

Code:
#define Makro 4
#include <lib1.h>

lib1.h in "libraries\lib1\":
Code:
...
int meins[Makro];

Dagegen funktioniert es aber in der Reihenfolge und so:
Code:
#include <lib1.h>
...
und hier "Makro" vorhanden

lib1.h in "libraries\lib1\":
Code:
#define Makro 4
...
int meins[Makro];

Ich bin überall drauf gestoßen, dass Markos nur in der Datei sichtbar sind, wo sie im Quelltext ersetzt wurden (Sichtbarkeitsbereich von Makros). Da gibt es verschiedene Beschreibungen, die mich in die Irre führten und das irgendwie nicht logisch erklären konnten, warum und wie das gemeint ist. Es ist irgendwie nicht wirklich logisch, dass ein Makro, das vor dem Includen einer Datei definiert wurde, in der Include-Datei nicht sichtbar ist. Ist aber so. Nur anders herum funktioniert es tatsächlich. Include ich eine Datei, werden die Makros nach dem Inlcuden auch im Quelltext sichtbar sein, wo die Datei per Include eingebunden wurde. Das ist aber das, was ich so nicht gebrauchen kann, wenn meine Bibliothek (H und CPP) im "libraries"-Verzeichnis liegt. Denn wie soll ich in der H-Datei dort eine Datei per "include" einfügen, von der ich nicht weiß, wo sie sich später befindet (in welchem Sketch-Ordner)? Deshalb bin ich jetzt den einzigen Weg gegangen, der noch logisch erscheint. Ich habe die H- und CPP-Dateien aus "libraries" entfernt und in den Sketch-Ordner gepackt, wo ich sie benötige. Dort verwende ich diese Kopie, in der ich dann, entsprechend der Bedürfnisse des Arduino-Sketches, die Makros anpasse. So sind die Makros dann auch im Sketch bekannt. Zwar nicht so elegant, wie ich das haben wollte, aber funktioniert zumindest.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2020, 14:02 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 14:11 von MicroBahner.)
Beitrag #13
RE: Bedingte Compilierung von Extern
(27.11.2020 06:39)Nichtraucher schrieb:  Ich bin überall drauf gestoßen, dass Markos nur in der Datei sichtbar sind, wo sie im Quelltext ersetzt wurden (Sichtbarkeitsbereich von Makros).
Das ist nur fast richtig. Sie sind in der 'Übersetzungseinheit" sichtbar, innerhalb der sie definiert wurden. Das ist ein riesieger Unterschied. Wenn Du eine Datei per #include einbindest, gehört sie zu dieser Übersetzungseinheit. Es ist dasselbe, als wenn Du sie an der Stelle hineinkopiert hättest. Wenn Du vor dem #include ein Makro definierst, ist das dann in dieser Übersetzungseinheit ( also z.B. beim Übersetzen des .ino-Files ) auch innerhalb der .h-Datei zu sehen. In dem Moment gehört die .h Datei direkt zu deinem ino-File dazu.

Im Lib-Verzeichnis bindest Du dieselbe .h Datei aber auch in deine .cpp-Datei ein. Das wird dann getrennt übersetzt, und ist eine eigene Übersetzungseinheit. Wenn nun in der .cpp-Datei keine Makro-definition vor dem #include vorhanden ist, ist der Makro dann beim Übersetzen der .cpp-Datei auch nicht bekannt, und es kommt zu einer Fehlermeldung.

Das Problem tritt also dann auf, wenn die .h-Datei in verschiedene - getrennt übersetzte - Dateien eingebunden wird. Und das ist bei Libraries nunmal der Normalfall: Da wird die .h Datei sowohl in deiner .ino, als auch in deine .cpp Datei im Lib-Verzeichnis eingebunden. Da beides getrennt übersetzt wird, ist dann im einen Fall (.ino) der Makro vorhanden, und im anderen Fall (.cpp) nicht.

P.S. Wenn Du den Makro innerhalb der .h Datei definierst, ist er dann in jeder Übersetzungseinheit, in der Du die .h Datei inkludierst ab dem #include sichtbar.
Du musst dir klarmachen, dass ein #include letztendlich auch nichts anderes als eine Ersetzung ist: das #include wird durch den Inhalt der inkludierten Datei ersetzt. Der Kompiler sieht da keinen Unterschied dazu als wenn Du das manuell hineinkopiert hättest.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Compilierung dauert lange student1704 6 9.630 22.09.2020 19:31
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste