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

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Voguecocktail
Beiträge: 13
Registriert: 19.05.2019, 11:17

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

Beitrag von Voguecocktail » 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?
beste Grüsse Stefan

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 10.05.2020, 23:08

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

Benutzeravatar
FUEL4EP
Beiträge: 584
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 77 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 11.05.2020, 17:35

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
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 11.05.2020, 19:51

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

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

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

Beitrag von stan23 » 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:
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

Voguecocktail
Beiträge: 13
Registriert: 19.05.2019, 11:17

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

Beitrag von Voguecocktail » 11.05.2020, 21:48

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
beste Grüsse Stefan

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 11.05.2020, 22:43

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

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 11.05.2020, 22:46

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

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

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

Beitrag von TomMajor » 12.05.2020, 00:43

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/
Dateianhänge
stack_heap.png
stack_heap.png (20.85 KiB) 1258 mal betrachtet
Viele Grüße,
Tom

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 12.05.2020, 08:03

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

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“