www.mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
         ...
  unsigned char x_pos;
  unsigned char y_pos;
  int position;
         ...
  position = y_pos*126 + x_pos*6;
         ...
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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.