mikrocontroller.net

Forum: Compiler & IDEs Compilerschalter


Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich bin auf der Suche nach einer eleganten Debug-Möglichkeit mit
AVR-Studio. Ich habe mehrere Dateien in meinem Projekt (main.c, lcd.c,
uart.c usw.). Wenn ich jetzt das .elf-extrakt in AVR-Studio lade und
debugge, bleibt der Debugger immer an verschiedenen Stellen hängen. Zum
Beispiel dann, wenn er ein Busy-Flag aus dem LCD auslesen will, was es
ja im Software-Debugger nicht gibt.
Damit ich trotzdem debuggen kann, wollte ich jetzt mittels
Compilerschaltern diese kritischen Stellen wie folgt umgehen:
In meiner Datei main.c schreibe ich "#define SW_DEBUG" und direkt am
Anfang der vermeintlichen Funktionen (wo der Debugger hängenbleiben
würde) schreibe ich:

#ifdef SW_DEBUG
return;
#endif

Leider funktioniert das nicht. Habe ich da was nicht richtig
verstanden? Der AVR-Studio-Debugger springt trotzdem in die so
modifizierten Funktionen, obwohl ich den Compilerschalter gesetzt
habe.
Hat von Euch vielleicht einer eine Idee was ich falsch mache? Oder hat
jemand eine andere Idee, wie man seine Software simulieren kann, auch
wenn auf bestimmte Ereignisse von Außen gewartet wird.
Eine Möglichkeit wäre sicherlich die entsprechenden Portpins des
Simulators per Hand zu setzen, aber das ist mir zu aufwändig, da
manchmal hunderte Male auf Busy Flags und anderes gewartet wird.

Im vorraus besten Dank,

Oliver

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn in main.c SW_DEBUG gesetzt wird, dann erfährt lcd.c nichts davon.

Im Studio gibt es getrennte Profiles für Debug und Optim. In der
Debug-Version schon im Studio das SW_DEBUG setzen, das kriegt dann
jedes Modul mit.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das war mein Problem. Wenn ich SW_DEBUG in lcd.c setze
funktioniert es wie gewünscht.
Wie meintest Du den zweiten Teil Deiner Antwort? Wo kann ich im Studio
SW_DEBUG setzen?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Menu Project/Config...
Active Config...: "debug" auswählen oder erzeugen.
Links "Custom Options" und -DSW_DEBUG anfügen.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reden wir von dem selben Programm? Ich habe AVR Studio 4.12 und kann
kein Menu Project/Config finden. Im Menü Projekt kann ich nur
New,Open,Save,Close auswählen!? Welche Version meinst Du?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
4.12. Hängt vielleicht davon ab, wie man das Projekt anlegt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Menü: Project

Gaanz unten: Configuration Options

Darauf hin geht ein Dialog auf: Dort wählst du in der
linken Leiste gaaanz unten die Custom Options aus und
kannst daraufhin dem Compiler die Compilerflags mitgeben.

Ein mögliches Compilerflag ist es, dass er beim compilieren
deinen Switch von vorne herein vorgibt:

-DSW_DEBUG

Eine völlig andere Möglichkeit ist es, wenn du dir von hier
http://www.helmix.at/hapsim/
den Simulator holst und nach dem AVR-Studio startest. Der Simulator
verbindet sich dann mit dem WinAVR-Debugger und hängt dann
ein virtuelles LCD (oder ein paar Led oder Taster) an die
simulierten Ports an.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sorry, das ich erst jetzt antworte! Ich habe meinen eigenen Bericht
nicht mehr wiedergefunden. Hatte ihn die ganze Zeit im µC-Forum gesucht
und nicht gefunden, aber egal.

Jetzt weiß ich auch, warum ich die Settings für den Compilerswitch
nicht finden konnte! Ich hatte im Studio nur das *.elf file geöffnet,
welches ich mit WinAVR generiert habe. Ich wußte bis dato gar nicht,
das ich im AVR-Studio neben Assembler auch die Möglichkeit der
C-Programmierung habe. Liegt wohl daran, das ich die Umstellung von
Assembler auf C über das Tutorial gemacht habe und da ist nur die Rede
vom "Programmers Notepad" Auf jeden Fall freue ich mich riesig, dass
ich im Studio auch alle Möglichkeiten habe, da ich aus Assemblerzeiten
dran gewöhnt bin.

Das mit dem Compilerflag funktioniert jetzt auch, obwohl ich nicht
verstehe, was das "-D" vor meinem "SW_DEBUG" genau bedeutet-
vielleicht define? Auf jeden Fall funktionierts!

Die Sache mit dem LCD-Simulator habe ich jetzt auch versucht und muss
sagen, dass das genau das ist, was ich schon immer vermisst habe! Hätte
ich das schon früher gewusst, hätte ich mir einige Stunden am
AVR-Simulator sparen können. Man lernt nie aus!

Allerbesten Dank nochmal für die Hilfen!

Oliver

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Kommandozeile von gcc kannst Du mit der Option -D NAME ein Define
machen. Das hat dieselbe Wirkung wie ein

#define NAME

Viel Spass, Stefan

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

Bewertung
0 lesenswert
nicht lesenswert
> Das hat dieselbe Wirkung wie ein

> #define NAME

Genauer: wie ein

#define NAME 1

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.