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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.