Ist das ein Speicherüberlauf?

OP #6773866
Lesenswert?

Moingsen, auch wenn es in der Nacht ist.

Ich habe das Problem, das meine Temp und Feuchte Messung, mit einem 
GY-21 Sensor nach ca 16 STD nicht mehr den nachvollziehbaren Wert von um 
die 20 Grad anzeigt, sondern -40.

Mit meiner Ahnungslosigkeit vermute ich einen Speicherüberlauf, da ich 
es aber nicht weis, frage ich mal euch, was ihr dazu denkt.
Ich nutze die SparkFun_Si7021_Breakout_Library.h um ihn auszulesen und i
die beiden Variablen als:
1
  float humidity = 0;
2
  float temp = 0;

 die ich für die Anzeige auf dem Display konvertiere bzw caste:
1
void loop()
2
{
3
  if (menu == 1)
4
  {
5
    temp = sensor.getTemp();
6
    humidity = sensor.getRH();
7
    char buffer[32];
8
    sprintf(buffer, "%d ", (int)temp);
9
    oledWriteString(&ssoled, 0, 0, 0, (char*)buffer, FONT_STRETCHED, 0, 1); //temperaturwert anzeigen
10
    oledWriteString(&ssoled, 0, 30, 0, (char*)"Grad", FONT_NORMAL, 0, 1);
11
    sprintf(buffer, "%d%%", (int)humidity);
12
    oledWriteString(&ssoled, 0, 64, 0, (char*)buffer, FONT_STRETCHED, 0, 1), humidity; //Luftfeuchtigkeit anzeigen;
13
    oledWriteString(&ssoled, 0, 112, 1, (char*)"Lf", FONT_NORMAL, 0, 1);
14
    updateMenu();
15
  }

Interessieren würde mich ob meine Vermutung stimmt und wenn ja, wie ich 
das Problem lösen kann oder der Ursache auf die Schliche komme.
Abendliche Grüße.
#6773898
Lesenswert?

Die einfachste Möglichkeit wäre ein JTAG Debugger und gdb.

Wenn du das nicht zur Hand hast gibt es natürlich noch viele weitere 
Möglichkeiten. Unter Anderem:
- "temp" nach "sensor.getTemp();" auf einen Festen Wert setzten. Ändert 
sich dieser sind evtl die Display Routinen das Problem.
- Alles nicht absolut notwendige auskommentieren und schauen ob das 
Problem weiterhin besteht.
- Der Sensor ist sehr einfach anzusprechen, daher kannst du die 
Kommunikation auch sehr schnell selbst implementieren.
- Den Code auf deinem PC zum Laufen bringen, durch Ersetzen und/oder 
Weglassen der Hardwareabhängigen Teile.
...
Beitrag #6773901 wurde von einem Moderator gelöscht.
Gast #6773902
Lesenswert?

Ob es irgendwo einen Speicherüberlauf gibt oder nicht, kann man nicht so 
leicht sagen. Kann sein, muss aber nicht. Bei einem PC hat man gute 
tools, nach sowas zu suchen (asan, valgrind, etc.) aber auf dem UC ist 
das schwieriger, da muss man halt nehmen, was man hat. So oder so wirst 
du es aber halt leider altmodisch Debuggen müssen. Nachsehen, was es 
macht, überlegen, was es machen sollte, bis du die Quelle gefunden hast. 
Und erwarte das unerwartete, am Ende ist vielleicht einfach der Sensor 
halb kaputt (ist -40C nicht gerade das minimum für den?) oder was 
ähnlich unerwartetes.
Gast #6773951
Lesenswert?

In dem aufgeführten Teil ist nichts, was zu Speicherüberlauf führen 
könnte.
Und auch das Fehlerbild, wenn bei mir mal so etwas passiert, ist etwas 
anderes: nämlich lustige Abstürze.

Man könnte jetzt noch den Sensor und die Oledausgabe einzeln testen, ob 
in deren Bibiliotheken Speicher verbraucht wird. Sprich jeweils den 
anderen Teil abschalten.

Ich schätze eher an einen I2C Lesefehler, welcher zu dem unteren 
Grenzwert interpretiert wird.
OP #6773963
Lesenswert?

PittyJ schrieb:
> Ich schätze eher an einen I2C Lesefehler, welcher zu dem unteren
> Grenzwert interpretiert wird.

Gemutmaßt habe ich auch schon einen I2C Fehler, dies aber auch wieder 
verworfen, weil das Display auch über I2C kommuniziert und neben der 
falschen Temperatur weiterhin alle Angaben wie erwartet anzeigt, wie die 
Feuchtigkeit und Teile des Menüs. Ich habe mal ein Bild gemacht, damit 
man sich eine Vorstellung machen kann.
Im übrigen hat sich gerade gezeigt, beim Versorgen der Schaltung mit 
Strom (war die ganze Nacht Stromlos), zeigte sich der Fehler noch immer, 
und nach dem Bilder machen war er wieder weg und zeigte 17 Grad an.
Angehängte Dateien:
Gast #6774092
Lesenswert?

kannst du mal Schaltplan und Code posten ?

Hast du ein Oszilloskop zur Hand und kannst dir mal den Bus angucken wie 
die Signale aussehen ( pull-up Widerstände am bis vorhanden ? ).

evtl "beißen" sich auch deine Verwendeten libs. Schonmal andere Probiert 
?

für Sensor : https://github.com/adafruit/Adafruit_Si7021

für oled : 
https://github.com/adafruit/Adafruit-128x64-Monochrome-OLED-PCB

Das sind schonmal zwei libs vom selben Hersteller.

Gruß
Gast #6774229
Lesenswert?

Xaver M. schrieb:
> Im übrigen hat sich gerade gezeigt, beim Versorgen der Schaltung mit
> Strom (war die ganze Nacht Stromlos), zeigte sich der Fehler noch immer,
> und nach dem Bilder machen war er wieder weg und zeigte 17 Grad an.

Vielleicht solltest du deine Hardware einmal überprüfen. Was liefert die 
Anzeige, wenn du den Sensor entfernst?
Und was soll das alberne "%95" in der Anzeige. Taucht das auch auf, wenn 
vernünftige Werte angezeigt werden?
Bring erstmal die Software in Ordnung, bevor du nach einem Speicherleck 
suchst.
Gast #6774338
Lesenswert?

Vielleicht hetzt du ihn auch einfach nur.

Ich kenne den Code nicht, aber ich würde da zwischen den Messungen immer 
etwas Zeit lassen.

Viele Libs die ich bisher genutzt habe laufen einwandfrei wenn man 
dazwischen etwas anderes o. halt ein Delay einsetzt.
Gast #6774453
Lesenswert?

Schlaumaier schrieb:
> Ich kenne den Code nicht, aber ich würde da zwischen den Messungen immer
> etwas Zeit lassen.

Das Datenblatt des SHT21 verrät sogar, wie lange der Sensor für die 
einzelnen Messungen in Abhängigkeit von der gewählten Auflösung benötigt 
(Tab. 7).

Außerdem beträgt die Zeitkonstante des Feuchtesensors 8s, die des 
Temperatursensors zwischen 5 und 30s. Da braucht man sowieso Geduld und 
hektisches Auslesen bringt einem wenig.
OP #6774469
Lesenswert?

Wolfgang schrieb:
> Schlaumaier schrieb:
>> Ich kenne den Code nicht, aber ich würde da zwischen den Messungen immer
>> etwas Zeit lassen.
>
> Das Datenblatt des SHT21 verrät sogar, wie lange der Sensor für die
> einzelnen Messungen in Abhängigkeit von der gewählten Auflösung benötigt
> (Tab. 7).
>
> Außerdem beträgt die Zeitkonstante des Feuchtesensors 8s, die des
> Temperatursensors zwischen 5 und 30s. Da braucht man sowieso Geduld und
> hektisches Auslesen bringt einem wenig.

Kann das etwas bringt, eine Zeitfunktion zum Auslesen des Sensors alle 
2,3,4,5 min habe ich noch geplant einzufügen. Probiere ich die Tage mal 
aus. Mal sehen ob der Fehler dann weg ist, oder dann erst Tage baucht 
zum auftauchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren