mikrocontroller.net

Forum: Compiler & IDEs assert.h auf AVR


Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst halt insbesondere stderr (in Kleinbuchstaben ;-) so
ausstaffieren, dass es auf deine SD-Karte schreibt.

Es gibt ein stdiodemo...

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan:
Wenn Du das hier meinst, find ich es "sehr überschaubar".
http://www.nongnu.org/avr-libc/user-manual/group__...
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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sache mit stdout/stderr Umleiten siehe hier:
http://www.nongnu.org/avr-libc/user-manual/group__...

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.