Interruptproblem

Gast #444204
Lesenswert?
• ▲
▼
Hallo

Ich habe ziemliche Probleme, eine funktionierende Delay Funktion zu 
schreiben.

Ich habe einen Timer, dessen Interrupt alle 1ms ausgeführt wird.
Für meine Zwecke reicht es, wenn die Verzögerunge +-1ms daneben
liegt.

Ich habe mir folgenden Code überlegt:

int main(void) {
WritelnUart("x");
wait=5;
while (wait>0) {};
WritelnUart("y");
}

Interruptroutine:
if (wait>0) {
wait--;
char stringint[12];
IntToStr(stringint, wait); // Wandle Messwert in String um.
WritelnUart(stringint);
}


WritelnUart gibt einen String Zeilenweise über Uart aus.
IntToStr wandelt int in einen String um.

Ich erhalte folgende Ausgabe:
x
4
3
2
1


Warum wird "y" nie erreicht?
#444217
Lesenswert?
• ▲
▼
Bitte poste reale Programme, nicht so ähnliche.
Es gibt hunderte Möglichkeiten was du falsch machen
kannst.

> Warum wird "y" nie erreicht?
>
> wait=5;
> while (wait>0) {};
> WritelnUart("y");

Ich rate mal ins Blaue: Du hast wait nicht als volatile
definiert und daher hat der Compiler rausgefunden
dass es innerhalb von main() keine Chance gibt,
dass wait jemals einen anderen Wert als 5 annehmen
kann und hat ganz einfach

while (wait>0) {};

zu einer Endlosschleife um gepfriemelt.

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.