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?
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.
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
spess53 schrieb: > Welche ATMega8 Familie? Ich denke er meint ATMEGA48, 88, 168, 328. Die Vermutung mit den Sprungzielen ist richtig.
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?!
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)
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.
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
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
OK habs schon gefunden im Datenblatt. Danke für die Antworten!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.