Moin, also irgendwie steh ich gerade auf dem Schlauch. Annahme: Ich hab eine Schaltung mit LCD, Taster und blinkender LED. Meine LED lass ich in main.c mittels delays.h blinken. Jetzt hab ich eine Unterfunktion (Entpreller Taster und LCD-Ansteuerung) Der Taster kommt sagen wir mal ohne Interrupt aus, sondern wird im Programm in main abgefragt. Sagen wir mal meine LED blinkt alle 1 sek. und meine Unterfunktion braucht 5 sek. bis sie fertig ist. sieht das dann nicht so aus? Abstand 1 Sekunde: LED 1 LED 0 LED 1 LED 0 Taster 1 5 sek. LED 1 LED 0 Ich würde mir doch dann das Blinken kaputtmachen oder? Gruß der auf dem Schlauch stehende
> Parallel zu delay.h arbeiten
Das funktioniert nicht richtig. Mach das Blinken und die Entprellung mit
einem Timer-Interrupt.
Und in der Hauptschleife kannst du den Rest der Aufgaben erledigen.
AufdemSchlauch schrieb: > Meine LED lass ich in main.c mittels delays.h blinken. Das ist der Fehler. Mit delay_ms() braucht der Prozessor seine ganze Rechenleistung dafür, Warteschleifen zu zählen... Sieh dir andere funktionierende Programme an. Dort wirst du eine (Haupt-)Schleife finden, die der Prozessor dauernd abarbeitet. Und von "aussen" werden nur Flags gesetzt, die zeigen, dass etwas getan werden muß. Ein solches Flag wäre bei dir z.B. das Sekunden-Flag, das in einer kurzen und knackigen Timerinterruptroutine berechnet wird, und anzeigt, dass wieder mal eine Sekunde vorbei ist.
so in der richtung hab ich mir das ja auch gedacht, nur ist es doch irgendwie doof, dass man gleich mal am Anfang auf die falsche Fährte geführt wird, wenn man seine blinkende LED beim ersten Projekt in main schreibt.
Oder nimm gleich ein RTOS :) das ist mein Ernst. Nut/OS z.B. von dehnen sind hier auch Leute im Form unterwegs MfG Tec
AufdemSchlauch schrieb: > so in der richtung hab ich mir das ja auch gedacht, nur ist es doch > irgendwie doof, dass man gleich mal am Anfang auf die falsche Fährte > geführt wird, wenn man seine blinkende LED beim ersten Projekt in main > schreibt. Das Problem ist, dass jeder Anfänger irgendwo anfangen muss. Man kann einem Anfänger nicht gleich alles bis zum Timer und Interrupts eintrichtern, ehe er sein erstes Programm schreiben kann.
Wenn er mehrere Tasks in seinem ersten Programm hat, dann hat er noch etwas anderes falsch gemacht. :-)
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.