Forum: Mikrocontroller und Digitale Elektronik was bedeutet eine größere Interrupt Vector Size


von Johannes F. (j0nny)


Lesenswert?

Hallo!

ich hätte hier mal ne theoretische Frage! Und zwar soll ich in einem 
Protokoll die Unterschiede der ATmega8 Familie erklärn. Also die Familie 
unterscheidet sich nur in Speichergrößen, Boot Loader Support und 
Interrupt Vector Size. Die ersten Beiden Dinge sind mir klar. Nur weiß 
ich nicht was die Größe des Interrupt Vectors für Vorteile bringt????. 
Vl. heißt das, mann kann mehr Codezeilen für ISR reintexten?... Kennt 
sich da wer aus?

von Peter II (Gast)


Lesenswert?

Johannes Ferdinant schrieb:
> heißt das, mann kann mehr Codezeilen für ISR reintexten?

ja, oder man kann auch größer Adresse anspringen damit man auch das ende 
vom Flash erreichen kann.

von spess53 (Gast)


Lesenswert?

Hi

>Und zwar soll ich in einem
>Protokoll die Unterschiede der ATmega8 Familie erklärn.

Welche ATMega8 Familie?

>Nur weiß
>ich nicht was die Größe des Interrupt Vectors für Vorteile bringt????.
>Vl. heißt das, mann kann mehr Codezeilen für ISR reintexten?... Kennt
>sich da wer aus?

Ich rate mal: Bei AVRs bis 8Kb Flash reicht ein rjmp um an jede Stelle 
des Programmspeichers zu springen. Bei mehr Flash wird ein jmp benötigt. 
rjmp belegt ein Word im Programmspeicher. Ein jmp 2 Word.

MfG Spess

von Detlev T. (detlevt)


Lesenswert?

spess53 schrieb:
> Welche ATMega8 Familie?

Ich denke er meint ATMEGA48, 88, 168, 328.

Die Vermutung mit den Sprungzielen ist richtig.

von Johannes F. (j0nny)


Lesenswert?

OK ich meinte exakt die 8-bit Familie megaAVR (ATmega8 ist natürlich nur 
ein Controller daraus)!

@ PeterII:
heißt das ich kann also mit einer Interrupt Vector Size von 1 
instruction Word/Vector nur 2^8=256 Codezeilen für ISR verwenden. Bei 
einer Size von 2 instruction words/vector jedoch schon 2^16= 65536. D.h. 
mit 65536 kann ich  einen Flash von 8, 16 oder 32Bytes schon vollständig 
adressieren.
Habe ich das richtig verstanden, 256 Zeilen für ISR sind nämlich nicht 
wirklich viel?!

von Peter II (Gast)


Lesenswert?

Johannes Ferdinant schrieb:
> heißt das ich kann also mit einer Interrupt Vector Size von 1
> instruction Word/Vector nur 2^8=256 Codezeilen für ISR verwenden. Bei
> einer Size von 2 instruction words/vector jedoch schon 2^16= 65536. D.h.
> mit 65536 kann ich  einen Flash von 8, 16 oder 32Bytes schon vollständig
> adressieren.
> Habe ich das richtig verstanden, 256 Zeilen für ISR sind nämlich nicht
> wirklich viel?!
nein


- wenn die Interrupt Vector Size 1 ist, dann ist es ein WORD also 2byte. 
dort müssen die opcodes und werte rein. also JMP 0x12

- bei 2 hat man also 4byte platz, man könnte also auch 4 NOPs 
reinschreiben. aber üblicher ist denn ein (R)JMP 0x1234

mit der größe der ISR hat das überhaupt nichts zu tun, ausser wenn du es 
schaffst du ISR auf 2 oder 4byte unterzubekommen, dann kannst du dir den 
JMP sparen.

(sind bestimmt noch fehler drin, aber grundstätzlich sollte es so 
passen)

von trollaufspürer (Gast)


Lesenswert?

Johannes Ferdinant schrieb:
> Habe ich das richtig verstanden
Nein. In die Interruptvektortabelle kommt pro Interrupt ein Sprungbefehl 
(der dann je nach Art 1 oder 2 Worte belegt). Der eigentliche Code ist 
(fast) beliebig lang und kommt irgendwo anders hin.

von Peter D. (peda)


Lesenswert?

Die Vector Size sagt nur aus, daß alle AVRs ihre ISRs im gesamten Flash 
plazieren können.
Und das bedeutet bei >8kB Flash eben 2 Words je Vector.


Peter

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Nein. Beim Interrupt-Vektor ist entweder nur 1 Instruction-Word pro 
Interrupt oder 2 Words. Bei AVRs mit bis zu 8kB Flash reicht 1 Word aus, 
um mit einem Sprung (RJMP) bis ans Ende des Flashs zu kommen, wo dann 
die Interrupt-Routinen sind. Bei einem größeren Flash reicht ein RJMP 
nicht mehr aus, da es nicht den ganzen Flash adressieren kann. Deshalb 
muss man ein JMP nehmen, welches 2 Words groß ist. Und genau deshalb 
sind bei größeren AVRs die Interrupt-Vektoren größer - damit da auch ein 
JMP reinpasst. Die Interrupt-Routinen selbst liegen ja nicht im 
Int-Vektor und können deshalb beliebig groß sein. Sie müssen nur 
angesprungen werden können, was bei großen AVRs mit einem RJMP nicht 
geht. Amen.

BTW: Hast Du eigentlich schonmal ins Datenblatt eines AVRs geschaut? Ich 
sach nur: RTFM! Das steht da alles drin.


Gruß
Jonathan

von Johannes F. (j0nny)


Lesenswert?

OK habs schon gefunden im Datenblatt. Danke für die Antworten!

von Reinhard Kern (Gast)


Lesenswert?

Jonathan Strobl schrieb:
> Bei einem größeren Flash reicht ein RJMP
> nicht mehr aus, da es nicht den ganzen Flash adressieren kann. Deshalb
> muss man ein JMP nehmen, welches 2 Words groß ist.

Hallo,

das stimmt schon, aber der Vorteil ist trotzdem recht gering, von 
"Müssen" kann sowieso keine Rede sein. Man kann immer und bei jedem 
Prozessor eine relativen JUMP auf einen absoluten JUMP führen und damit 
jeden Speicherplatz erreichen. Der eine Befehl mehr fällt weder 
platzmässig noch zeitlich ins Gewicht. Man kann daher sogar mit 8 bit 
Vektoren auskommen, dann steht halt am Anfang des Speichers eine 
Interrupt Tabelle mit 256 Sprungbefehlen. Mehr IRQs braucht niemand.

Gruss Reinhard

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.