Seite 16 von 21

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 10.05.2020, 21:38
von Voguecocktail
Ja aber dann erschliesst es mir nicht warum es mit den Debug den korrekten Luftdruck liefert und auskommentiert einen Druck wie auf dem Everest?

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 10.05.2020, 23:08
von HMSteve
Voguecocktail hat geschrieben:
10.05.2020, 21:38
Ja aber dann erschliesst es mir nicht warum es mit den Debug den korrekten Luftdruck liefert und auskommentiert einen Druck wie auf dem Everest?
Siehe mein Post weiter oben. Warum er Sensorregister falsch ausliest, habe ich auch nicht verstanden.

Viele Gruesse,
Stephan

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 17:35
von FUEL4EP
Hallo Stefan und Stephan,

nun bin ich ein wenig verwirrt, was Eure Debug Setups sind. Habe ich das so korrekt verstanden?

1. kein Debugging über den serial Monitor

Code: Alles auswählen

#define NDEBUG   // disable all serial debug messages
Der Sketch verwendet 25404 Bytes (82%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 1173 Bytes (57%) des dynamischen Speichers, 875 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Ergebnis: plausibler Luftdruck

2. eingeschaltetets Debugging über den serial Monitor

Der Sketch verwendet 28300 Bytes (92%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 1237 Bytes (60%) des dynamischen Speichers, 811 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Code: Alles auswählen

//#define NDEBUG   // disable all serial debug messages
Ergebnis: nicht plausibler, zu niedriger Luftdruck

Hier eine Erklärung eines Stack Überlaufs, der das Fehlerbild auslösen könnte:

https://forum.arduino.cc/index.php?topic=447962.0

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 19:51
von HMSteve
Hallo Ewald,

Ohne jetzt die genauen Zahlen mit meinen verglichen zu haben, ist das genau die Situation. Wie gesagt verstehe ich nicht, wie das Problem generiert wird, weil eigentlich ein korrekt geflashter Controller eben korrekt geflasht ist und 800 byte freies RAM nicht so wenig sind als dynamisch allokierbare Reserve fuer „ein paar“ Debugmeldungen. Faende es aber auch muessig, Zeit in die genauere Analyse zu stecken.
Meine Platinen haben die Chemie gerade hinter sich, sollten morgen verschifft werden, mal sehen, wie lange das derzeit dauert. Produktion ist bis jetzt schon mal deutlich flinker als im Februar.

Viele Gruesse,
Stephan

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 20:14
von stan23
Hi Stephan,
das heißt ja nicht dass die 800 Byte frei sind und nur für die Debug-Ausgabe benutzt werden.

Diese 800 Byte müssen für den Stack (lokale Variablen und Übergabeparameter) sowie für den Heap (alles was dynamisch allokiert wird, z.B. die Instanzen der String-Klasse) herhalten.

Der Stack wächst von unten, der Heap von oben, und wenn sie zusammenstoßen ist es vorbei :roll:

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 21:48
von Voguecocktail
Eben genau umgekehrt. Mit seriellem Monitoring Druck korrekt. Ohne Monitoring Druck zu tief
Es betrifft nur den Druck, alle anderen Werte bleiben stabil mit oder ohne Debug

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 22:43
von HMSteve
Hallo Stefan,

interessante Beobachtung, hatte ich oben ueberlesen, danke fuers Klarstellen. Bei mir gilt:
1. Testsketch aus meinem Github Repository: Druck ohne Debug-Messages ok, mit Debug-Messages ca 680 hPa
2. IAQSensor-Sketch aus Jeromes Repository mit kleinen Anpassungen an meine Hardware, eben als Gegencheck probiert: Druck mit *und* ohne Debug-Messages ca 680hPa

Offenbar gilt bei Deinem geringfuegig anderen IAQ-Sensor-Sketch
3. Druck mit Debug-Messages ok und ohne Debug-Messages fehlerhaft

Bleibt doch nur der Schluss, dass das Projekt auf der Hardware nur zufaellig funktioniert, oder wie seht Ihr das?

Viele Gruesse,
Stephan

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 11.05.2020, 22:46
von HMSteve
stan23 hat geschrieben:
11.05.2020, 20:14
Hi Stephan,
das heißt ja nicht dass die 800 Byte frei sind und nur für die Debug-Ausgabe benutzt werden.

Diese 800 Byte müssen für den Stack (lokale Variablen und Übergabeparameter) sowie für den Heap (alles was dynamisch allokiert wird, z.B. die Instanzen der String-Klasse) herhalten.

Der Stack wächst von unten, der Heap von oben, und wenn sie zusammenstoßen ist es vorbei :roll:
Danke, Marco, das ist natuerlich total richtig, der Compiler kann ja den Platzbedarf der lokalen Variablen nicht mitzaehlen, da war der Wunsch (nach viel RAM) wohl Vater meines Gedankens ...

Viele Gruesse,
Stephan

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 12.05.2020, 00:43
von TomMajor
stan23 hat geschrieben:
11.05.2020, 20:14

Der Stack wächst von unten, der Heap von oben, und wenn sie zusammenstoßen ist es vorbei :roll:
Der Stack wächst von oben nach unten, der heap umgekehrt (bei der Arduino/AVR Architektur).

Es gibt Tools zur statischen Codeanalyse die den KABOOM Fall im Bild unten zur Buildtime schon erkennen könnten, aber im Hobbybereich eher nicht anzutreffen.

Es gibt aber Libs die free memory zur Laufzeit monitoren können, immerhin sollte man dann ein sauberes Fehlerereignis mit definiertem Ausgang bekommen und nicht unbemerktes Verfälschen von Variablen (oder Rücksprungadressen) was ein ganz böser Fehler ist und schwer zu tracken.
z.B.
https://playground.arduino.cc/Code/AvailableMemory/

Re: HB-UNI-Sen-IAQ - Luftgütemessung mit BME680

Verfasst: 12.05.2020, 08:03
von HMSteve
Danke fuer den Hinweis auf die MemoryFree lib. Habe mal ganz rasch an ein paar Stellen im Code, bspw beim I2C-Lesen in der ClosedCube Lib, wo m.E. der Fehler ungefaehr entsteht, entsprechende Aufrufe eingebaut, jedoch erstmal keine Ausgaben <500 Bytes frei provozieren koennen. Sicher kann man da weiter spielen und das noch tiefer einbauen, habe ich mir jetzt gespart.

ABER: Nach Einbinden der Lib verschwindet mit meinem Test Sketch der Fehler bzgl des ausgelesenen Drucks! Ich kann jetzt Durck korrekt messen und gleichzeitig Debug-Ausgaben lesen, wenn das mal keine tolle Loesung ist...

Viele Gruesse,
Stephan