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?
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.
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?
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.
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.
Danke habs ausprobiert und hat geholfen! Die Begründung macht auch Sinn :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.