Forum: Compiler & IDEs Compilerschalter


von Oliver (Gast)


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

von A.K. (Gast)


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.

von Oliver (Gast)


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?

von A.K. (Gast)


Lesenswert?

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

von Oliver (Gast)


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?

von A.K. (Gast)


Lesenswert?

4.12. Hängt vielleicht davon ab, wie man das Projekt anlegt.

von Karl H. (kbuchegg)


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.

von Oliver (Gast)


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

von Stefan K. (_sk_)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Das hat dieselbe Wirkung wie ein

> #define NAME

Genauer: wie ein

#define NAME 1

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
Noch kein Account? Hier anmelden.