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