Gimpel wrote:
> Da "#include<avr/io.h>" in "avr/interrupt.h" schon enthalten ist, kann
> ich doch auf diese textzeile verzichten? oder etwa nicht?
Keine gute Idee.
Du verwendest Dinge aus io.h, also solltest du das auch includieren.
Wenn interrupt.h seinerseits io.h inkludiert, dann ist das seine
Sache, die dich nicht interessieren muss.
>
> Und ""Takt_Counter"" initialisier ich ja als Globale Variabel, so sollte
> diese auch im Main erkannt werden.
Es geht nicht um die Initialisierung.
Es geht um die Erhöhung, bzw. darum, was der Optimizer sich
dabei denkt, wenn er deine Hauptschleife in main() sieht.
Der denkt sich nämlich:
Oh, super: Da wird ständig eine Variable Takt_Counter abgefragt.
Aber innerhalb der Schleife gibt es für Takt_Counter keine
Möglichkeit, wo es sich ändern könnte. Also brauch ich die
diese Variable gar nicht aus dem Speicher auslesen, sondern
halte sie ganz einfach in einem Register vor. So kann ich
dann die Zeit für einen Speicherzugriff sparen.
Super: Deine Interrupt Routine ändert laufend den Wert
im Speicher, aber deine Hauptschleife holt ihn sich nie
aus dem Speicher, weil der Optimizer diesen Speicherzugriff
wegoptimiert hat.
Und da kommt volatile ins Spiel: volatile teilt dem Compiler
mit, dass er diese Variable auf jeden Fall immer aus dem
Speicher holen muss, da sie auf Wegen verändert wird, die
der Compiler nicht erkennen kann.