Timer Interrupt - Speicher voll?

Gast #2312223
Lesenswert?

Hallo alle miteinander,

ich habe auf meinem Atmega644 die FAT FS library von Elm Chan 
implementiert.

Es funktioniert alles so weit prächtig. Wenn ich allerdings einen der 
Timer benutzen möchte um in regelmäßigen Abständen in eine Datei zu 
schreiben hängt der µC sich einfach auf. Ohne Interrupt, d.h. mit 
aktiver Wartezeit hingegen kein Problem.

Weis jemand Rat? Während dem Interrupt wird doch ein Teil des 
Programmaufrufs gespeichert. Kann es sein dass das Programm bereits zu 
groß is und der Speicher voll läuft?
#2312233
Lesenswert?

Sneim schrieb:

> Es funktioniert alles so weit prächtig. Wenn ich allerdings einen der
> Timer benutzen möchte um in regelmäßigen Abständen

wie regelmässig sind denn die Abstände?

> in eine Datei zu
> schreiben hängt der µC sich einfach auf.

Kann es sein, dass du etwas zu kurz regelmässig schreibst und daher der 
µC aus dem Schreiben gar nicht mehr rauskommt, weil er nur noch 
Interrupts abarbeitet?


> Weis jemand Rat?

Interrupt setzt Jobflag.
Jobflag sorgt in der Hauptschleife für den Schreibvorgang. Das ist die 
übliche Methode wie man regelmässige Aktionen organisiert, die länger 
andauern. Und schreiben auf eine SD-Karte qualifiziert mit einiger 
Sicherheit als ein länger andauernder Vorgang.
#2312237
Lesenswert?

Sneim schrieb:
> Regelmäßig bisher ~1s
>
> D.h. die Vorgehensweise in der ich im Interrupt das Schreiben erledige
> ist sowieso quatsch. Ich sollte also ein Flag lesen, dass dann gelöscht
> wird und dann schreiben?

Das ist die Variante, mit der man solche Dinge üblicherweise macht. Hat 
sich bewährt. Schon alleine deshalb, weil der Schreibcode dann nicht 
mitten in irgendwelche anderen Aktionen reinplatzt und halbfertige Daten 
schreibt.
Gast #2312249
Lesenswert?

Bist du sicher, dass die Schreibe-Funktion kürzer ist als das 
Interrupt-Intervall?

Deine Theorie mit dem vollen Speicher ist etwas mager, denn das "große" 
Programm ist im Flash gespeichert, die Werte die beim Aufruf des 
Interrupts gespeichert werden landen auf dem Stack welcher sich im Ram 
befindet.

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