Forum: Mikrocontroller und Digitale Elektronik Codevisionfehlermeldung: "overflow is possible, ..."


von Daniel (Gast)


Lesenswert?

Hallo,
ich steige gerade von AVR Studio auf Codevision um. Dazu passe ich 
meinen Code, der in AVR Studio ohne Fehler lief, an.
Hier ein Codestück
1
         ...
2
  unsigned char x_pos;
3
  unsigned char y_pos;
4
  int position;
5
         ...
6
  position = y_pos*126 + x_pos*6;
7
         ...
Bei Codevision bringt er nun folgende Fehlermeldung  für den Code:
"overflow is possible in 8-bit multiplication, casting may be required" 
und
"overflow is possible in 8-bit addition, casting may be required"

Die Warnung bleibt auch bei long int.

Ich weiß das:
y_pos<=15 und x_pos <=21 somit wäre postion<=2016!!!

Gruß Daniel

von Ulrich (Gast)


Lesenswert?

Der Sagt dir doch schon was falsch ist ;-)

Der Fehler liegt nicht an der Variablen Position sondern innerhalb der 
Multiplikation.

Du musst y_pos und x_pos auf einen größeren Wertebereich während der 
Multiplikation casten. Probiere mal:
position = (int)y_pos*126 + (int)x_pos*6;

Da ich den Compiler nicht benutze kann es auch sein das meine Antwort 
überhaupt nicht stimmt....

Mfg
Ulrich

von A.K. (Gast)


Lesenswert?

Auf 8bit-Microcontroller spezialisierte Compiler rechnen 8bit Daten gern 
8bittig. Das ist zwar effizienter, aber ANSI schreibt vor, dass das 
Ergebnis so aussehen muss, als ob alles mindestens 16bittig gerechnet 
würde. Kann sein, dass er hier auf diese Falle hinweisen will, denn 
dieser Code wird mit rein 8bittiger Rechnung nicht funktionieren. Kann 
auch sein, dass der Compiler diesbezüglich einstellbar ist.

von johnny.m (Gast)


Lesenswert?

Anscheinend führt der CodeVision-Compiler (und afaik alle 
"professionellen" Embedded-C-Compiler für 8-Bit-Systeme) Berechnungen 
standardmäßig (also ohne weitere Angaben) im Unterschied zum 
AVR-GCC-C-Compiler (und damit im Unterschied zum ANSI-Standard) nicht in 
16 Bit sondern in 8 Bit durch, was natürlich bei einem dedizierten 
Embedded-C-Compiler für 8-Bit-µC-Systeme allein aus Codegrößen- und 
Speicherressourcen-Gründen Sinn macht. Der ANSI-Standard ist nunmal 
ursprünglich nicht für 8-Bit-Systeme gemacht und deshalb macht der 
AVR-GCC als ANSI-C-Compiler meines Wissens auch alle Berechnungen intern 
standardmäßig in 16 Bit, was manchmal zu etwas mehr Code und 
Speicherbedarf führt. Diejenigen, die von einem ANSI-Compiler auf einen 
dedizierten und entsprechend modifizierten Embedded-C-Compiler 
umsteigen, müssen sich natürlich darauf umstellen.

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.