Codevisionfehlermeldung: "overflow is possible, ..."

Gast #464407
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
Gast #464421
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
Gast #464435
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.
Gast #464436
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.