Forum: Mikrocontroller und Digitale Elektronik kann atmega1284 int32_t types?


von Eugen T. (der_eugen_thorben)


Lesenswert?

hi,

ich hätte eine Frage.

Ich benutze avr studio 7 und deklariere dort eine int32 Variable.

dort speichere ich z. B.  den wert 10*3600 + 50*60. also größer als ein 
int16.

in der compiler konsole kommt die warnung, dass es ein overflow ist.

und die zahl wird nicht richtig angezeigt.

auch wenn ich die variable mit long signed oder uint32_t deklariere, 
trotzdem steht dort eine warnung wegen overflows.

kennt jemand diesen fehler?

ich bin da etwas ratlos. scheint so, als dass der compiler was nicht 
rafft.

von Peter II (Gast)


Lesenswert?

Eugen T. schrieb:
> kennt jemand diesen fehler?

ich denke schon

> ich bin da etwas ratlos. scheint so, als dass der compiler was nicht
> rafft.
nein, er hält sich nur ein den C Standard.

50*60 wird als int gerechnet, weil du keine vorgaben machst, damit wird 
es abgeschnitten.
1
10ul*3600ul + 50ul*60ul

sollte da helfen.

von Cyblord -. (cyblord)


Lesenswert?

Eugen T. schrieb:
> hi,
>
> ich hätte eine Frage.
>
> Ich benutze avr studio 7 und deklariere dort eine int32 Variable.
>
> dort speichere ich z. B.  den wert 10*3600 + 50*60. also größer als ein
> int16.
>
> in der compiler konsole kommt die warnung, dass es ein overflow ist.
>
> und die zahl wird nicht richtig angezeigt.
>
> auch wenn ich die variable mit long signed oder uint32_t deklariere,
> trotzdem steht dort eine warnung wegen overflows.
>
> kennt jemand diesen fehler?
>
> ich bin da etwas ratlos. scheint so, als dass der compiler was nicht
> rafft.

Ich hab da eine andere Vermutung wer hier was nicht rafft.
Natürlich geht (u)int32_t.

Poste mal deinen Code und die Fehlermeldung dazu.

: Bearbeitet durch User
von Kaj (Gast)


Lesenswert?

Fehler in Zeile 42.

von Peter II (Gast)


Lesenswert?

Korrektur:

hier ist der überlauf 10*3600 ( > 32.000 )

von (prx) A. K. (prx)


Lesenswert?

Das übliche Missverständnis. In
  var = expr;
hat der deklarierte Typ von "var" keinerlei Einfluss auf die Art, wie 
in "expr" gerechnet wird. In
  c = a * b;
erfolgt also die Multiplikation in einer Weise, die nur von den Typen 
von a und b abhängt, nicht aber von c.

: Bearbeitet durch User
von Eugen T. (der_eugen_thorben)


Lesenswert?

jojo peter 2,

vielen großen dank, muss ul dahinter klatschen, sonst klappt es nicht 
richtig.


vielen, vielen dank, mit dem fehler hab ich mich nen ganzen tag 
beschäftigt.


für eine zeitrechnung, wo die sekunden zu stunden und min gerechnet 
werden.

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.