Frage zur 8-bit-AVRs

OP #1411138
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!
Gast
>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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.