Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt - Speicher voll?


von Sneim (Gast)


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?

von Karl H. (kbuchegg)


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.

von Sneim (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


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.

von voll (Gast)


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.

von Sneim (Gast)


Lesenswert?

Danke habs ausprobiert und hat geholfen! Die Begründung macht auch Sinn 
:)

von uwe (Gast)


Lesenswert?

evtl. auch das Statusregister in der Interuptroutine "push"en und 
"pop"en sonst sind die Flags die von Befehlen im Hauptprogram gesetzt 
werden futsch wenn er aus der Interuptroutine zurückspringt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.