Forum: Mikrocontroller und Digitale Elektronik wieviele LONG denn noch :-)


von dost0011 (Gast)


Lesenswert?

Hallo,

sitze gerade an einer AVR Studio GCC Simulation und muss folgende Zeile 
berechnen:

long temp_l = (long)((long)(v_neu-v_alt))*((long)(3906));

Werte:
v_neu = 23
v_alt = 0
temp_l = 24302!!!!

Was mache ich denn falsch, dass ich hier einen Überlauf erhalte?
Wieviele longs muss ich denn noch casten???
Gibts irgendwo eine Anleitung zum Casten (z.B. welche Datentypen führen 
bei einer Multiplikation / Division zu welchem Ergebnis?)
Vielen Dank für Eure Geduld...

von Falk B. (falk)


Lesenswert?

@  dost0011 (Gast)

>long temp_l = (long)((long)(v_neu-v_alt))*((long)(3906));

Machs mal eher so.

1
long temp_l = (v_neu-v_alt)*3906L;

>Wieviele longs muss ich denn noch casten???

Das WO ist entscheidend. Klasse statt Masse.

von max (Gast)


Lesenswert?

Welches System? Die sizeof() von long ist dort wieviel Byte?

von Oliver (Gast)


Lesenswert?

max schrieb:
> Welches System?

dost0011 schrieb:
> AVR Studio GCC

Wrr AVRs kennt, kennt die Antwort...

Oliver

von asdf (Gast)


Lesenswert?

Oliver schrieb:
> Wrr AVRs kennt, kennt die Antwort...

Die 8-Bit AVRs oder die AVR32 vielleicht? Man könnte ja auch Details 
nennen um anderen das Herumraten zu ersparen.

von dost0011 (Gast)


Lesenswert?

Entschuldigung, ich habe keine Details genannt, weil ich nicht wusste, 
dass es darauf ankommt.

Atmel ATTINY85
AVR Studio 4
GCC

Ich habe das Gefühl, dass AVR Studio irgendeinen alten Code vorliegen 
hat und simuliert. Änderungen von mir im Code landen nicht in der 
Simulation...

Gruß

von Micha (Gast)


Lesenswert?

Aber du kompilierst schon, oder ??

von Karl H. (kbuchegg)


Lesenswert?

dost0011 schrieb:
> Entschuldigung, ich habe keine Details genannt, weil ich nicht wusste,
> dass es darauf ankommt.
>
> Atmel ATTINY85
> AVR Studio 4
> GCC
>
> Ich habe das Gefühl, dass AVR Studio irgendeinen alten Code vorliegen
> hat und simuliert. Änderungen von mir im Code landen nicht in der
> Simulation...

Dann mach mal einen Rebuild-All oder lösch das komplette debug 
Verzeichnis

von (prx) A. K. (prx)


Lesenswert?

dost0011 schrieb:

> Was mache ich denn falsch, dass ich hier einen Überlauf erhalte?

Die Rechnung ist zwar ineffizient (Falks ist besser) aber nicht falsch. 
Kann es sein, dass der Wert falsch ausgegeben wird, also nur als "int"?

von dost0011 (Gast)


Lesenswert?

Also meine Rechnung funktioniert nun ebenfalls.
Ich habe nun AVR Studio von 4.14 auf 4.19 upgedatet und nun funktioniert 
es auch mit meiner umständlichen Schreibweise.
Die Schreibweise ist ja nur entstanden, weil das Ergebnis immer falsch 
war. Compiliert habe ich jedesmal nur wurde das für die Simulation 
irgendwie nicht übernommen.
Nun nutze ich natürlich auch gleich die neue Schreibweise...

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.