www.mikrocontroller.net

Forum: Compiler & IDEs seltsames verhalten von integer


Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf meinem mega2561 läuft inetwa dieser code ab (gekürzt):

volatile int runh=0;

SIGNAL (SIG_OVERFLOW2) {
runh++;
...
}

int main() {
...
while(1) {
GPrintf(0,130,white,black,"uptime:%dh,%dm,%ds",runh/3600,runh/60,runh);
...
}
return 0;
}

Die meiste Zeit werden die Zeiten richtig auf dem Display angezeigt, 
teilweise kommt es aber vor, dass die Werte negativ werden. Ich dachte 
das würde ein speicherüberlauf oder ähnliches auslösen aber manchmal 
werden negative (seltsame) werte angezeigt, hin und wieder dann wieder 
die richtigen. Hat jemand eine Idee?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das passiert, wenn die Interruptroutine gerufen wird, während die 
Ausgabe (printf) zusammengestellt wird, und dabei deine Variable 
verändert wird.

Abhilfe: Nicht 3x runh als printf-Parameter verwenden, sondern in 
temporärer Variable kurz vor Verwendung umkopieren (unter 
Interruptsperre).

Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah danke, ich hab mir sowas schon gedacht. werd ich mal ausprobieren!

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.