mikrocontroller.net

Forum: Compiler & IDEs Eigene Hinweise im AVRStudio erzeugen?


Autor: TobiTob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mich heute fast 2h daran aufgehangen einen Fehler in meinem 
Programm zu finden. Das Problem war das ich einen Char Buffer überfahren 
habe. :-(

Ich würde es nun toll finden wenn man beim erstellen eigener 
Unterprogramme eine kleine Prüfung einbauen könnte. Sodas mich AVR 
Studio warnt wenn ich mal wieder daneben liege.

Mein Aufruf wäre in etwa so...

fill_str(buffer, 5, '0');

nun soll er den buffer mit dem Char '0' auffüllen bis die Länge 5 
erreicht ist.

In der Function fill_str wäre es nun vorteilhaft das er mir eine Warnung 
oder Fehler ausspuckt wenn der Länegenparameter einen bestimmten Bereich 
verläst. Sagen wir nicht mehr als 10.

Wie kann man sowas machen?

Gruß Tobi...

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

Bewertung
0 lesenswert
nicht lesenswert
Mit assert().  Allerdings macht assert bei Fehlern eine Ausgabe nach
stderr, dafür solltest du also was dahinter haben, und danach einen
abort().

Autor: TobiTob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort.
Kannst Du mir das bitte an einem Beispiel etwas genauer erklären?

Eine Fehlermeldung wenn er beim compilieren merkt das der Wert width>5 
ist wäre ein guter Ansatz, dann kann ich weitere Situationen bestimmt 
davon ableiten.

Es werden ja Fehler und Warnungen ausgegeben, kann man das beides 
steuern?

Gruß Tobi...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Eine Fehlermeldung wenn er beim compilieren merkt das der Wert width>5
> ist wäre ein guter Ansatz, dann kann ich weitere Situationen bestimmt
> davon ableiten.

Bei assert() kann man die Fehlermeldung zur Laufzeit erzeugen lassen.
http://www.nongnu.org/avr-libc/user-manual/group__...

Zur Compilezeit so was zu machen, ist IMHO nicht möglich, denn dazu 
müsste der Compiler eine Variable (hier width) auswerten, also das 
Programm laufen lassen.

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für eigene Hinweise und Fehlermeldungen gibt es die 
Präprozessoranweisungen
 #warning 
 und
 #error 

Aber das sind eben nur Präprozssoranweisungen, die keinen "Einblick" in 
Variablen haben (wie sollten sie auch). Dafür sind eben die oben 
aufgeführten asserts da. Damit kannst Du zumindest dein Programm 
definiert beenden.

MfG,
Richard

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.