MemoryError

Meine Platine mit der RTC DS3231 und dem Stromsensor INA219 wird mit einem FiPy mit Pycom MicroPython 1.20.1.r1-0.7.0-vanilla-dragonfly-onewire angesteuert.
Während ich den Stromverbrauch messe, stürzt der Fipy öfter ab mit der Fehlermeldung:

Erst mit Strom aus/ein läuft der FiPy wieder.
Die angemeckerte Zeile
image funktioniert viele Male gut.

Der Fehler ist jetzt in einem anderen Programm aufgetaucht:


Das Programm stürzt immer in der 878. Schleife ab. Damit ist der Code an sich fehlerfrei, aber im Memory / Variablen sammelt sich etwas an, das zum Absturz führt.

Kann da der garbage collector helfen?

Der gc wird eigentlich ziemlich oft im Programm aufgerufen. Der gibt auch nur nicht referenzierte Objekte frei. Solange Speicher noch von referenziert wird, hilft der leider gar nicht.

Was genau lässt Du da im loop laufen?
Schon mal versucht, Programmteile auszukommentieren, bis der Fehler nicht mehr auftritt?

Klarer Fall für den GarbageCollector.
Im loop wird nur jede Sekunde der DS3231 ausgelesen und angezeigt. Dazu wird alle x Sekunden Alarm 1 gesetzt und nach y Sekunden wieder gelöscht. Über den Ausgang SQW kann man per MOSFET den FiPy ein/ausschalten.
Mit gc läuft es stabil.

1 Like

Ah - das musst Du aber auch sagen, was Du genau gemacht hast. Ich hatte Terkin angenommen und der macht ausgiebig Gebrauch von gc.

Es ist ein kleines Testprogramm für den DS3231: Nur jede Sekunde auslesen, Zeit ausgeben und evtl Alarm 1 ein- bzw. ausschalten. Also keine komplizierten Dinge. Ohne gc hängt es irgend wann, mit gc läuft es viele mal.

1 Like