C-Programmierung ADC

Gast #3447231
Lesenswert?

Hallo, habe eine kleine Frage zu folgender Programmierung:
1
double VREF=1.1;
2
double SpanADC=18200;
3
double adc;
4
double adw;
5

6

7

8
adc = ad_vcc(PORT_SPANNUNG);
9
adc *=VREF;
10
adc /=1024;
11
adc *=SpanADC;  //wird beim debuggen übersprungen
12
adw  =adc/200;
13
adw *=1000.0;  //wird beim debuggen übersprungen
Die beiden kommentierten Zeilen werden beim debuggen immer übersprungen 
und somit ist das Ergebnis falsch.

Wieso werden die übersprungen?

Danke
#3447278
Lesenswert?

Hansiiii schrieb:

> Wieso werden die übersprungen?

Eventuell weil du den Optimizer eingeschaltet hast und der die 
Anweisungen ein wenig umgruppiert hat.

Das Ergebnis mag temporär falsch sein (durch die Umgruppierung der 
Anweisungen), aber spätestens wenn dann adcw das endgültig verwendet 
wird, zb in einem Funktionsaufruf in dem der Wert ausgegeben wird), muss 
die Zahl dann korrekt sein.

Ergo: Wenn der Optimizer eingeschaltet ist, darf man nicht alles vom 
Debugger für bare Münze nehmen. Manche Werte sind einfach nur deswegen 
falsch, weil die Berechnung vom Optimizer ein wenig verschoben wurde und 
deshalb an der konkreten Stelle an der man im Debugger sich den WErt 
ansieht, noch gar nicht erfolgt ist (sondern erst ein wenig später 
gemacht wird)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren