Forum: Mikrocontroller und Digitale Elektronik Frage zur 8-bit-AVRs


von Steffen K. (human)


Lesenswert?

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!

von holger (Gast)


Lesenswert?

>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.

von Achim (Gast)


Lesenswert?

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.

von Herr M. (herrmueller)


Lesenswert?

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
Noch kein Account? Hier anmelden.