Forum: Mikrocontroller und Digitale Elektronik Keil-Compiler optimiert Variable weg


von Erik H. (agutanus)


Angehängte Dateien:

Lesenswert?

Ich versuche gerade auf einem STM32fx107... µC diverse Sensoren 
auszuwerten. (Gyro, Beschleunigung)
Dafür habe ich ein Teil des Codes, der die Lage der Sensoren berechnen 
soll, über Simulink/Targetlink erstellt.

Das Ergebnis der Berechnungen wird zur Zeit noch nicht weiter verwendet, 
und soll nur zur Auswertung im Debugger genutzt werden. Dummerweise 
optimiert der Compiler den letzten Schritt Berechnung des Ergebnisses 
einfach weg :-(
(in der angehängten Funktion die Zeile: )
1
Sb1_Out_Winkel = Sb3_Switch2;
Wie kann ich das verhindern?

Programmierumgebung: Keil µVision v4.22.15.0
C-Compiler: armcc.exe v4.1.0.791
von (prx) A. K. (prx)


Lesenswert?

Die Zielvariable vorläufig als volatile deklarieren.
von Greeny (Gast)


Lesenswert?

Erik H. schrieb:
> Das Ergebnis der Berechnungen wird zur Zeit noch nicht weiter verwendet
Was nicht benötigt wird, wird wegrationalisiert.
von Daniel -. (root)


Lesenswert?

Erik H. schrieb:
> Das Ergebnis der Berechnungen wird zur Zeit noch nicht weiter verwendet,
> und soll nur zur Auswertung im Debugger genutzt werden. Dummerweise
> optimiert der Compiler den letzten Schritt Berechnung des Ergebnisses
> einfach weg :-(

nicht ganz ernstgemeint, interessant ob Compiler
die Variable immernoch wegschmeisst.

int result = f(/*deine berechunung*/), * ptr = &result;
ptr = ptr++;
von Erik H. (agutanus)


Lesenswert?

Deklarierung als volatile führt zu Compile-Fehler (welcher, weiß ich 
gerade nicht, da das Programm inzwischen umgeschrieben und momentan 
nicht kompilierbar ist)

Letztendlich habe ich die Variable:
1
static Int32 X_Sb1_Unit_Delay = 0
global deklariert, sodass ich sie in eine watch-Liste einfügen und 
bequem beobachten konnte.

@Daniel: eventuell von anderer Seite wurde mir bereits geraten einfach:
benötigteVariable ++;
benötigteVariable --;
einzusetzen...
ich nehme mal stark an, dass dein Beispiel funktioniert hätte, habe es 
aber nicht getestet, da nicht mehr benötigt.
von Winfried (Gast)


Lesenswert?

Hallo,

hast Du die Compiler Options auf "0: constant folding" gesetzt? Wenn ja, 
dann sollte nichts optimiert werden.

Viele Gruese
Winfried
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.