Hallo, wenn man erst mal weiß, wonach man sucht, geht es doch deutlich einfacher ... Ich wollte mir einige Hilfsfunktionen schreiben, um Fehler zur Laufzeit zu bearbeiten (z.B. beim CAN-Controller MCP2515 einem change-mode befehlen, artig alle laufenden messages abwarten und dann das Statusregister zurücklesen, ob der Mode auch tatsächlich ausgeführt wird). Bei µC's kann man nach meinem bisherigen Wissen ja nicht so viel machen (da kein STDERR etc.), und immer gleich einen Reset hilft auch nicht wirklich weiter. Also dachte ich mir, schreib die Fehler quasi als Log auf eine SD-Karte. Dann fand ich assert() als scheinbar supergeniale Möglichkeit, Sourcefilenamen und Funktionsnamen als Variable zu haben (#error und #warning für den Preprozessor als weitere super Testmethode fielen bei der Suche gleich mit ab). Nur schweigt sich die libc da aber etwas aus bzw. ich habe es wohl doch noch nicht ganz verstanden, wie man das auf einem µC anwendet. Hat jemand mal einen Link auf irgendeinen Beispielcode, wo die Verwendung klar wird?
Lutz schrieb: > Nur schweigt sich die libc da aber etwas aus ??? Ich finde nicht, dass die AVR-Libc-Doku zum assert irgendwie unklar oder lückenhaft wäre. Was genau fehlt dir da?
Du musst halt insbesondere stderr (in Kleinbuchstaben ;-) so ausstaffieren, dass es auf deine SD-Karte schreibt. Es gibt ein stdiodemo...
@ Stefan: Wenn Du das hier meinst, find ich es "sehr überschaubar". http://www.nongnu.org/avr-libc/user-manual/group__avr__assert.html Ich verstehe das so, daß wenn man __ASSERT_USE_STDERR nicht definiert, einfach nur abort() aufgerufen wird (was vermutlich zu einem Reset führt?). @ Jörg: Da werde ich dann heute Abend mal etwas in der stdiodemo stöbern.
Lutz schrieb: > @ Stefan: > Wenn Du das hier meinst, find ich es "sehr überschaubar". Und? Es steht eigentlich alles drin, was man wissen muss. Daher nochmal die Frage: was genau vermisst du dort? > Ich verstehe das so, daß wenn man __ASSERT_USE_STDERR nicht definiert, > einfach nur abort() aufgerufen wird. Ja. > (was vermutlich zu einem Reset führt?). Nein. Aber auch die abort-Funktion ist dokumentiert.
Die Sache mit stdout/stderr Umleiten siehe hier: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html
Hmh ... Da scheint mir dann doch eher etwas ANSI-C(-Mangel) das Problem zu sein. Die Links helfen mir da auf jeden Fall weiter, Danke. Wie gesagt: Wenn man erst mal weiß, wonach man sucht, geht's deutlich leichter.
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.