Forum: Compiler & IDEs Interruptproblem


von Tilo (Gast)


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?

von Karl heinz B. (kbucheg)


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.

von Tilo (Gast)


Lesenswert?

Danke für die Hilfe.
Genau daran lag es.

Ich werde versuchen, in Zukunft vollständigen Code zu posten.

Bis dann,

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
Noch kein Account? Hier anmelden.