Forum: Mikrocontroller und Digitale Elektronik Debugging per JTAG mittels define erkennen


von Max (Gast)


Lesenswert?

Gibt es im Atmel Studio 6 ein globales define, mit dem ich zu 
compilierzeit feststellen kann, ob das JTAG-Interface zum debuggen oder 
nur zu, Programmieren genutzt wird?
Ich programmiere den mega1284P per JTAG ohne zu debuggen. in dem fall 
kann ich per software das JTAG-Interface im AVR abschalten, weil ich die 
Pins anderweitig benötige.wenn ich nun aber am Debuggen bin, muss ich 
die Zeilen in denen ich JTAg abschalte auskommentieren.
Dies möchte ich nun automatisieren!

von A. B. (funky)


Lesenswert?

Das kann eigentlich nicht funktionieren.
Wenn du debuggst wurden deine Sourcen ja schon lange kompiliert, sprich 
es ist zu spät da irgendwelche #defines zu setzen

Ich weiss nicht, ob man im Atmel Studio leicht zwischen einerm Build 
Release und einem Debug Release wechseln kann, so wie es zum Beispiel im 
Visual Studio geht(ich befürchte aber das es diese Option nicht gibt)
Dort werden dann je nach gewähltem Release Mode unterschiedliche Defines 
gesetzt, und du könntest z.B. im Release Modus das JTAG Interface 
deaktivieren

von Bugger (Gast)


Lesenswert?

Du hast in einem header file
1
define DEBUG    // Bei Normalbetrieb auskommentieren!!
1
#ifn defined DEBUG
2
3
// Hier kommt alles rein, was während dem Debuggen nicht gebraucht wird
4
5
#endif

von Bugger (Gast)


Lesenswert?

Bugger schrieb:
> #ifn defined DEBUG
> // Hier kommt alles rein, was während dem Debuggen nicht gebraucht wird
> #endif

Das steht natürlich dann nicht im headerfile, sondern im c file

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


Lesenswert?

Max schrieb:
> wenn ich nun aber am Debuggen bin, muss ich
> die Zeilen in denen ich JTAg abschalte auskommentieren.

Musst du nicht: das JTD-Bit muss ja in einer zeitlichen Abfolge
zweimal hintereinander geschrieben werden, damit die Abschaltung
wirksam wird.  Wenn du nun einen Breakpoint auf den ersten dieser
Befehle setzt und dann einzelschrittweise durch die zwei Zeilen gehst,
dann ist die Zeitbedingung nicht mehr erfüllt, und die Abschaltung
wird nicht wirksam.

von Max (Gast)


Lesenswert?

das is ne gute idee, das werd ich machen.
ich hatte nur die idee, das vielleicht von der entwicklungsumgebung ein 
globales define vorhanden sein könnte, mit dem ich beim compilieren 
schon erkennen kann ob debuggt werden soll oder nur geflasht

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


Lesenswert?

Ich glaube, Atmel Studio unterscheidet in der Tat zwischen "Release"
und "Debug", weil sie das von der Microsoft-Umgebung so geerbt haben.
Ob sie davon abhängig auch ein #define setzen, weiß ich nicht.

Nur: letzten Endes wird man früher oder später immer mal gezwungen
sein, exakt das fertige Programm zu debuggen, und nicht eins, was
sich irgendwie davon dann doch wieder unterscheidet.  Spätestens
am Tag X, an dem entweder die Debug-Version gar nicht mehr in den
Flash passt, oder aber die Debug-Version im Prinzip läuft (nur zu
viele Ressourcen verbraucht), die Release-Version beim Kunden aber
doch bloß nicht.

Von der Warte her bin ich immer ganz vorsichtig mit solchen separaten
Debug-Builds, und debugge lieber gleich die Version, die dann später
auch produktiv werden soll.

Eine weitere Möglichkeit, in der Firmware zu entscheiden, ob man
das JTAG abklemmen soll oder nicht wäre es, wenn man noch einen freien
Pin als Eingang übrig hat: den Pull-up dafür konfigurieren, und zum
Debuggen dann den Pin auf low ziehen.  Bevor die Firmware das JTD
setzt, prüft sie, ob der Eingang auf low steht oder nicht.

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.