Dir ist aber schon klar das in der Wartezeit das komplette Programm steht. Es sind weder Eingaben noch Ausgaben möglich.
Für diese Aufgaben sind die Timer vorgesehen.
Dir ist aber schon klar das in der Wartezeit das komplette Programm steht. Es sind weder Eingaben noch Ausgaben möglich.
Für diese Aufgaben sind die Timer vorgesehen.
Klares "Jein" dazu.
Das kommt auf den Anwendungsfall an. Ich persönlich finde es grausam, ein Konstrukt über einen Timer zu entwerfen, dass mir z.B. das Blinken einer einfachen Betriebs-LED im Sekundentakt erlaubt (am Blinken über die Wait-Routine siehst Du sogar, wie Deine IRQ-Auslastung ist).
Alles in IRQs auzulagern, während das Hauptprogramm sich bei
Main: jmp Main
in der Nase bohrt, ist auch Kappes.
Timer verwendest Du, wenn Du ein Timing (nach oben und nach unten, z.B. UART-Emulation) einhalten willst. Die Verwendung von einfachen Warteschleifen zur Einhaltung von Mindestzeiten (z.B. Tastenentprellen, I2C-Emulation,...) ist meiner Ansicht nach legal.
Das ist wohl etwas Ansichtssache. Ich verwende wait-Routinen ausschließlich nur vor dem main um zu warten bis externe Geräte oder Bauteile Ready sind oder um auf dem Display Programmname und Versionsnummer anzuzeigen.
Innerhalb der main gibt es nur Timer, wenn es ein ernst gemeintes Programm ist. Ein "blinky" zählt nicht dazu.
Kein Gerücht, siehe Hubert G.:
Noch 2014 hat Hubert G. bei einem LED-Problem geholfen, siehe https://www.roboternetz.de/community...ight=Hubert+G.
Damals hielt er die Verwendung der _delay_ms-Funktion in der Main für legitim,
Heute schließt er dies quasi aus.
Der hat sich weiterentwickelt.
Übrigens: Lass mich bitte nicht dumm sterben: Wo steht diese Norm? Ist das schon ISO-zertifiziert? Ich lerne gern.
Zu diesen Diskussionen fällt mir immer nur auf (und das ist meine Erfahrung):
- "Ich finde...", "meiner Meinung nach ...", " Für mich"... sind Meinungsäußerungen.
- "...ist unprofessionell..", "..nimmt man.." sind dargestellte Fakten.
Bringt man Euch diese Art von Diskussionskultur gar nicht mehr bei?
Über Meinungen kann man sich nicht streiten. Fakten kann man widerlegen.
Ich für meinen Teil verwende Wait-Funktionen immer noch gerne, insbesondere zu Diagnosezwecken bei der Inbetriebnahme. Da kann man wunderschön schnell kleine Testroutine schreiben, die einzelnen Signale durchpingen. Wenn ich wissen will, ob der benachbarte I2C-Bus Transienten auf dem AD-Eingang erzeugt, gebe ich mit Waitern in drei Minuten proggen oszilloskoptaugliche Rechtecke auf dem zu testenden Port aus.
Und wenn ich ein Programm mit einfachem Ablauf schreibe (z.B. polle an I2C, sende als UART), hindert mich nichts, aber auch gar nichts daran, die ganze Sache sequenziell mit zwei emulierten Schnittstellen auf dem Tiny45 mit Wait-Routinen herunterzuproggen.
Solange ich da auf beiden Schnittstellen Master bin und nichts asynchrones zu befürchten habe, muss ich das für meinen Teil nicht haben. Es würde mit Timern nicht besser funktionieren.
Das ist weder ein klares noch ein hartes Urteil. Eher die Erfahrung aus der Praxis, die zeigt, dass auch von Anfängern zusammengefummelte Lösungen neben der Norm exzellent laufen können, dass man Anfängern ihre Lernkurve und die verbundenen Fehler zugestehen muss. Die Ansprüche steigen mit der Zeit automatisch, damit die Wissbegierde und der Kenntnisstand. Dazwischen aber müssen erst einmal spielerische Erfolgserlebnisse her.
Schau mal im AVR-Tutorial bei Mikrocontroller.net (oder in Dein altes AVR-Assembler-Buch im Regal), in welchem Kapitel Timer angesprochen werden. Über den didaktischen Sinn, diese Infos in die zweite Hälfte des Lehrinhaltes zu schieben, mag ich mich mit Dir nicht streiten (und Du sicherlich auch nicht mit den Autoren).
Lesezeichen