Hallo Gemeinde :)
Ich würde gerne besser (bzw überhaupt mal) verstehen, wie sich die
beiden Default-Buildprofile "Release" und "Debug" der IAR Embedded
Workbench voneinander unterscheiden.
Hierzu folgendes Minimal-Szenario (getestet mit IAR EW for ARM in
Version 7.40 und 7.70):
ich erstelle ein neues Projekt
Project -> Create New Project -> Tollchain "ARM"; Project-Templates C
-> nun habe ich ein neues Projekt mit main.c, die lediglich
1 | int main()
|
2 | {
|
3 | return 0;
|
4 | }
|
enthält.
Da ich aktuell nur über eine IAR-Lizenz für Cortex-Kerne verfüge, wähle
ich anschließend noch in den Projektoptionen unter "General Options"
einen Cortex-M0 als Zielarchitektur aus, alle anderen Settings belasse
ich auf Default.
Standartmäßig steht das Build-Profil auf "Debug". Klicke ich nun auf den
"Download and Debug"-Button, wird meinen Mini-Projekt übersetzt etc und
in den Simulator geladen (alternativ kann ich natürlich auch einen
konkreten uC + Debugger, z.B. LPC11U35 oder STM32F0xx jeweils über SWD
mit JLINK als Debug-Probe angebunden auswählen - ändert nichts am
Ergebnis).
IAR erstellt automatisch einen Breakpoint am Anfang von main() und
wartet dort darauf, dass mit Klick auf "Go" (oder steppen durch die
Anweisungen) "loslaufe".
Soweit so gut.
Wähle ich nun das "Realease"-Buildprofil aus, wähle hierfür ebenfalls
den M0 als Zielarchitektur und klicke auf "Download and Debug", popt ein
Fenster mit der Fehlermeldung "The stack plug-in failed to set a
breakpoint on 'main'. The Stack window will not be able to display stack
contents. (You can change this setting in the Tool>Options dialog box.)"
In dem genannten Optionsdialog finde ich jedoch keine Einstellung, die
die Fehlermeldung erklären würde - insbesondere unterscheiden sich die
Einstellungen dort nicht von denen, die auch im Debug-Buildprofil dort
eingestellt sind.
Vergleiche ich die Projekteinstellungen, die IAR für die beiden
Buildprofile vornimmt, konnte ich lediglich bei der Compileroptimierung
einen Unterschied feststellen:
beim Debug-Profil steht die Compiler-Optimierung auf "Low", bei Release
auf "High (Balanced)". Selbst wenn ich probehalber die
Compileroptimierung für "Release" ebenfalls auf "Low" stelle, ändert
sich das geschilderte Verhalten nicht.
Daraus schließe ich, dass sich diese beiden Build-Profile noch an einer
weiteren (offenbar entscheidenden Stelle) voneinander unterscheiden
müssen - weiß jemand etwas dazu oder kann mir zumindest einen Hinweis
geben, wo in der IAR-Doku (oder anderen Quellen) sich dazu etwas
nachlesen lässt (ich habe bisher nichts dazu finden können).
Ich stelle die Frage hier nicht, weil ich das als akutes Problem lösen
muss - ich würde nur gerne den Zusammenhang verstehen, weil ich offenbar
noch diverse Wissenlücken habe, was grundsätzlich beim Debuggen, setzen
von Breakpoints etc passiert und welche Aspekte dabei eine Rolle spielen
(auch ganz unabhängig von der konkreten Toolchain).
Gruß,
Tom