Forum: Compiler & IDEs C-Programmierung ADC


von Hansiiii (Gast)


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

von Karl H. (kbuchegg)


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)

von Hansiiii (Gast)


Lesenswert?

Ja das war das Problem, hab jetzt noch ne bisschen rumprobiert und 
mittlerweile kommt auch das richtige Ergebnis heraus :)

Danke :)

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.