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?
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).
ah danke, ich hab mir sowas schon gedacht. werd ich mal ausprobieren!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.