Hallo, ich möchte mich erstmal bedanken für die Hilfe beim Einstieg in die Welt der Mikrocontroller! Hab mich zwischenzeitlich auch ein bisschen mit ein paar Modellen (ATtiny2313, ATmega8515, ATmega32) zusammen mit dem STK500 herumgespielt. Zu meinen Fragen: Wenn ich das richtig verstanden habe, dann wird ein "normaler" Assemblerbefehl (keine EPROM-Befehle usw.) pro Takt abgearbeitet, also bei 8 MHz werden 8.000.000 Befehle pro Sekunde abgearbeitet? Wenn das so ist, und ich einen 8-Bit-Timer habe, der mit dem Takt hochzählt, dann im Interrupt-Teil 256 oder mehr Assemblerbefehle habe, dass dann nurnoch der Interrupt ausgeführt wird und sonst nichts mehr oder noch schlimmer, der Interrupt wird dann auch immer wieder vom gleichen unterbrochen? Und was passiert wenn man mit einen Pointer außerhalb des Speicherbereichs zugreifen versucht, z.B. das RAM ist 1024 Bytes (hat dann die Adresse 0x000 bis 0x400) groß und ich greife auf die Adresse 0x401 zu? Ich freune mich schon sehr auf eure Antworten!
>Wenn ich das richtig verstanden habe, dann wird ein "normaler" >Assemblerbefehl (keine EPROM-Befehle usw.) pro Takt abgearbeitet, also >bei 8 MHz werden 8.000.000 Befehle pro Sekunde abgearbeitet? Nö. >oder noch schlimmer, der Interrupt wird dann auch immer wieder vom >gleichen unterbrochen? Nö. >>Und was passiert wenn man mit einen Pointer außerhalb des >Speicherbereichs zugreifen versucht, z.B. das RAM ist 1024 Bytes (hat >dann die Adresse 0x000 bis 0x400) groß und ich greife auf die Adresse >0x401 zu? Dann schmiert die Kiste ab.
Na, wenn das nicht mal genau so ne Antwort war auf die sich Steffen gefreut hat ;). >Wenn ich das richtig verstanden habe, dann wird ein "normaler" >Assemblerbefehl (keine EPROM-Befehle usw.) pro Takt abgearbeitet, also >bei 8 MHz werden 8.000.000 Befehle pro Sekunde abgearbeitet? Die meisten Instruktionen benötigen 1 Takt. Es gibt aber auch welche die mehr brauchen, wie z.B. Sprünge. Genauere Informationen findest du hier drin: http://www.atmel.com/atmel/acrobat/doc0856.pdf >Wenn das so ist, und ich einen 8-Bit-Timer habe, der mit dem Takt >hochzählt, dann im Interrupt-Teil 256 oder mehr Assemblerbefehle habe, >dass dann nurnoch der Interrupt ausgeführt wird und sonst nichts mehr >oder noch schlimmer, der Interrupt wird dann auch immer wieder vom >gleichen unterbrochen? Wenn dein Timer ohne Prescaler läuft sind zwischen zwei Overflows nur 256 Takte Zeit. Deine Interrupt Routine darf allerdings keine 256 Takte haben damit sie noch komplett zwischen 2 Overflows ausgeführt werden kann, da es auch noch ein paar Takte braucht um in den Interrupt zu springen und nachher wieder raus zu kommen. Dein Interrupt kann nicht von einem anderen unterbrochen werden, wenn du das nicht explizit zulässt. Genaueres dazu findest du im Datenblatt deines AVRs unter "Reset und Interrupt Handling". Deine Interrupt-Routinen solltest du natürlich immer so kurz wie möglich halten. >Und was passiert wenn man mit einen Pointer außerhalb des >Speicherbereichs zugreifen versucht, z.B. das RAM ist 1024 Bytes (hat >dann die Adresse 0x000 bis 0x400) groß und ich greife auf die Adresse >0x401 zu? Dein SRAM beginnt aber nicht an Adresse 0x0, sondern erst an 0x60. Davor befinden sich noch die Register und der I/O Bereich. Was passiert wenn du auf ne ungültige Adresse zugreifst hab ich noch nicht absichtlich getestet und dokumentiert ist das meines Wissens auch nicht. Also versuch es einfach zu vermeiden.
Die meisten einfachen Befehle brauchen tatsächlich nur einen Takt. Vergleiche und Laden/Speichern im SRAM brauchen länger. Wenn Dein Interruptprogramm länger ist, als die das Aufrufintervall, ist Dein Programm "unklug" aufgebaut. Der AVR merkt sich während der IR-Routine den erneuten Aufruf und führt ihn nach Beendigung wieder durch. Du hast jedoch die Möglichkeit den Timertakt zu teilen - bis /1024. Schau mal im Datenblatt unter TIMER PRESCALER.
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.