Go Down

Topic: #define im Sketch, benutzen in Library? (Read 523 times) previous topic - next topic

tuxedo

Hey,

ich hab in meinem Sketch folgendes stehen:

Code: [Select]
// comment following line to disable DEBUG mode
#define DEBUG debugSerial

// no need to comment, you can leave it as it is as long you do not change the "#define DEBUG debugSerial" line
#ifdef DEBUG
#include <SoftwareSerial.h>
SoftwareSerial debugSerial(10, 11); // RX, TX
#endif


Das steht gaaaaanz oben. Erst danach kommt der include für die im Sketch genutzte Library.

Nun möchte ich in der Library von diesem "#define DEBUG" gebrauch machen.

Funktioniert aber nicht. Dort hab ich im Header-File ein

Code: [Select]
#if defined(DEBUG)
....
#endif


was aber nicht greift.

Kann mir jemand 'nen Tipp geben was ich anders machen muss?

Hintergrundgedanke ist, dass ich die Lib in DEBUG Modus schalten kann, so dass sie auf der SoftSerial Konsole Debugausgaben schreibt. Ich will die gleiche SoftSerial Konsole aber auch im Sketch benutzen und auch im Sketch über Debug oder Nicht-Debug entscheiden...

Gruß
Alex

combie

Das Problem tritt auf, wenn die Lib aus einer *.h und einer *.cpp Datei besteht.
Beim kompilieren bekommt die cpp nichts vom Define in der Hauptdatei mit.


Ein Weg wäre, eine weitere *.h einzuführen, und in dieser die Einstellung zu machen.
Und diese *.h dann in alle weiteren einbinden.
Ein schwarzes Schaf, zur rechten Zeit, erspart den Streit, bringt Einigkeit.

tuxedo

> Das Problem tritt auf, wenn die Lib aus einer *.h und einer *.cpp Datei besteht.

Hmm, bekommt die .h das denn mit? Könnte da ggf. das define nochmal umdefinieren, so dass die .cpp das dann kennt.

Eine zentrale .h für Sketch + Lib ist nicht besonders userfreundlich. Würde ich vermeiden wollen.

Hab auch schon dran gedacht in der Lib einfach einen setter zu implementieren mit dem der User von außen ein Serial-Objekt reinreichen kann. Aber das würde heißen dass der ganze Debug-Krempel fest in der Lib drin ist und unnötig Platz belegt.

tuxedo

Hmmpf, der einzoge Weg scheint über eine gemeinsame Header-File zu gehen...

combie

Quote
Hmm, bekommt die .h das denn mit?
Ein mal ja, ein mal nein.
Also ein klares JAIN!

Nur die *.h, welche in der Hauptdatei eingebunden wird bekommt das mit.
Die gleiche *.h wird nochmal zur Kompilierung der *.cpp gebraucht, da bekommt sie das nicht mit.


Ja, die Arduino IDE hilft einem bei solchen Problemen nicht wirklich....

Besser wirds, wenn man eigene HardwarePlattformen anlegt.
So bekommt man seine Debugschalter ins Menu der IDE rein, wenn man denn will.
Die ESP8266 Erweiterung macht das so.
Da kann man sich das abschauen.
Finde ich recht gelungen
Ein schwarzes Schaf, zur rechten Zeit, erspart den Streit, bringt Einigkeit.

tuxedo

Danke. Die Idee mit der Hardwareplattform ist eine Idee. Da es bei meiner bastelei sowieso um eine Art Hardwareplattform geht ist das vermutlich sogar praktikabel.

Bis es soweit ist hab ich es so gelöst:

In der Lib gib's ein "#define DEBUG", sowie im Sketch das gleiche nochmal. Also zwei SoftSerial auf den selben Pins. Das funktioniert.

So kann man im Sketch DEBUG ein/ausschalten und wenn es sein muss kann man auch noch in der Lib DEBUG einschalten.


Werde mir aber das Thema "Hardwareplattform einstellen" beim ESP8266 Projekt anschauen.

Danke für den Tipp und die Erklärung.


Go Up