Hallo,
ich benutze zum Programmieren eines STM32f103 das Atollic TrueSTUDIO
Lite.
Dieses bietet einem die Möglichkeit über ein Auswahlmenü zwischen Debug
und Release beim kompilieren zu unterscheiden.
In meinem Programm nutze ich den Watchdog des STM. Um aber weiter
Debuggen zu können, muss dieser in der Debug-Phase deaktiviert werden.
Das Aktiviere bzw. Deaktivieren realisiere ich wie folgt:
1
#ifdef XXXXX
2
IWDG_init();//Funktion zum Initialisieren des WD
3
#endif
Nur leider kann ich nicht in Erfahrung bringen, welche Variable/Symbol
sich hinter dem Menü verbirgt (siehe Bild im Anhang).
Getestet habe ich folgende Varianten:
NDEBUG
__DEBUG
_DEBUG
DEBUG
...
Kann mir vielleicht jemand helfen und mir sagen welches Symbol ich für
"XXXXX" einsetzen muss?
Vielen Dank und Gruß
Ich spreche jetzt mal für Eclipse. Atollic Studio ist ja davon
abgeleitet.
In den jeweiligen Project-Properties kannst du die Compileroptionen
einstellen. Unter anderem auch defines, die per Kommandozeile an den
Compiler übergeben werden. Das geht jeweils für die Debug- und auch die
Release Konfiguration. Dort kannst du für die Debug-Konfiguration ein
define "DEBUG" eintragen und dieses dann später im Code verwenden. Bei
der Release-Konfiguration trägts du dieses define nicht ein.
Vielen Dank für deine schnelle Antwort.
Ich habe wie im Anhang gezeigt das Symbol "_NDEBUG" unter der
Debug-Konfiguration angelegt (Atollic.PNG).
Im Bild Atollic2.PNG ist zu erkennen, dass unter der
Release-Konfiguration das Symbol nicht existiert.
Wenn ich jetzt aber wie im Bild aus dem ersten Post umschalte, wird
nicht unterschieden. Bedeutet, bei
1
#ifdef _NDEBUG
2
IWDG_init();//Funktion zum Initialisieren des WD
3
#endif
wird die Funktion immer ausgeführt. Egal ob Debug oder
Release-Konfiguration.
Sind die Einstellungen denn eigentlich so richtig oder muss ich noch
weitere vornehmen?
Vielen Dank nochmal für die Hilfe
Wenn du das Projekt baust, dann sieh mal im Logfenster beim
Compileraufruf nach, ob das Define übergeben wird (Debug Konfig) oder
eben nicht (Release).
Daran müßtest du das gut sehen können.
Oder du hast das define noch woanders stehen :-)
Es scheint so, als ob alles richtig übergeben wird, oder? Das "_NDEBUG"
ist ja zu sehen.
Trotzdem wird keine Unterscheidung gemacht.
Hast du oder jemand anderes noch eine Idee?
Vielen Dank und Gruß...
Frank schrieb:> Getestet habe ich folgende Varianten:> NDEBUG> __DEBUG> _DEBUG> DEBUGFrank schrieb:> Das "_NDEBUG"> ist ja zu sehen.
Letzteres hast Du jetzt aber auch probiert, oder? Ansonsten sieht es
eigentlich gut aus.
HMm.. der Aufruf sieht gut aus.
Du mußt auch beachten, dass die Debug-Config (bei Eclipse zumindest)
auch in einem Debug-Directory den ELF-File erzeugt. Während die
Release-Config in einem Release-Ordner abgelegt wird. Vielleicht
startest du immer die Debug-Variante?
Hallo,
Problem war, wie 900ss gesagt hat, das ich immer das Debug-RLF-File
geladen habe. Es werden 2 verschiedene Files erzeugt, eins im Debug- und
eins im Release-Ordner. Leider lädt Atollic beim umschalten zwischen
Debug und Release immer nur das Debug-File in den Controller.
Da ich das Release-File nur per RS232 und dem ST Flash Loader und nicht
aus der IDE heraus lade, ist das also erstmal kein Problem.
Vielleicht hat aber ja noch einer eine Idee, wie man Atollic/Eclipse
dazu bringt auch gleich das richtige ELF-File zu laden.
Vielen Dank für die Hilfe und Gruß
Ich würde es einmal so versuchen:
In den Project Properties->RunDebug Settings auswählen.
Dort die entsprechende 'Launch configuration' markieren
(wahrscheinlich steht dort nur eine, "<Projektname>.elf"),
dann den Edit-Button drücken.
Dort steht üblicherweise (so z.B. bei meinem Projekt, das ich
gerade offen habe), als "C/C++ Application":
Debug/<Projektname>.elf
und als Build Configuration
Use Active
Ändere doch einfach bei "C/C++ Application" den Pfad auf "Release/" um.
Das Atollic beim Debuggen mit der Debug-Konfiguration startet,
finde ich nicht ganz unlogisch.