GCC-AVR: Wie Interrupt-Routine direkt in die Vektortabelle schreiben?

Gast #3021361
Lesenswert?
• ▲
▼
Ja, doch das ist eigentlich genau das wonach du gefragt hattest.

Der andere weg ist:

Neue ASM Datei mit Vectortabelle. Die Vectortabelle muss in eine neue 
Section gebettet werden. Dann musst du ein eigenes Linker-Script 
einbinden um die Tabelle an einem Platz im Flash zu platzieren.

Achso, jetzt verstehe ich was du willst.
Du kannst deinen Vector typischerweise nicht komplett in die 
vectortabelle schreiben. Da ist kein Platz.

0x0     Reset Vector
0x04    IRQ XY Vector
0x08    IRQ z  Vector

Du musst normalerweise mit einem Jump ohne Modifikation des 
Link-Registers
in deine ISR springen:

 0x0     Reset Vector
0x04    IRQ XY IsrAdress
0x08    IRQ z  Vector

und mit einem reti beendest du den ganzen Zauber dann.
se ist doch nur'n JMP :)

Beim Arm gibt es die Möglichkeit einen FIQ (für fast) zu implementieren:

0x0     Reset Vector
0x04    IRQ XY Vector
0x08    FIQ Code Beginnt hier, nachfolgende adressen sind nicht belegt.
OP (Firma: guloshop.de) #3021421
Lesenswert?
• ▲
▼
Also, erstmal danke für die Geduld mit mir. ;-)

netseal schrieb:
> Achso, jetzt verstehe ich was du willst.
> Du kannst deinen Vector typischerweise nicht komplett in die
> vectortabelle schreiben. Da ist kein Platz.

Ja, genau das habe ich gemeint! Platz ist dort aber oft genug.

Bei vielen Programmen verwende ich nur einen oder zwei 
Interruptvektoren. Oft ist zwischen dem ersten und dem zweiten genügend 
Platz für ein paar Befehle. Wenn es der zweite oder überhaupt der 
einzige verwendete Interruptvektor ist, dann gibts eh kein Problem, weil 
die ISR dann (fast) beliebig lang sein kann, die nachfolgenden Adressen 
werden in diesem Fall ja nicht für weitere Interruptvektoren benötigt.

Bei den 8-Bit-AVRs stehen in der Vektortabelle sinnigerweise nicht 
einfach Vektoren, sondern echte Befehle. Normalerweise sind das 
RJMP-Befehle, aber wenns schnell gehen soll, wird man nicht erst noch 
springen wollen.

Hoffentlich hab ich mich jetzt klar genug ausgedrückt... :-)
#3021438
Lesenswert?
• ▲
▼
Markus Weber schrieb:


> Bei den 8-Bit-AVRs stehen in der Vektortabelle sinnigerweise nicht
> einfach Vektoren, sondern echte Befehle. Normalerweise sind das
> RJMP-Befehle, aber wenns schnell gehen soll, wird man nicht erst noch
> springen wollen.

Dann musst du in Assembler arbeiten.
Für einen Compiler ist das zuviel geforderte Flexibilität. Das kriegt er 
nicht mehr gebacken. Zumal ja erst beim Linken feststeht, ob der Platz 
in der Vektor-Tabelle überhaupt frei wäre.


Wie lange braucht der rjmp? Sind die (ich glaube es sind) 2 Takte 
wirklich das entscheidende Kriterium für deine Anwendung?
OP (Firma: guloshop.de) #3021764
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> Wie lange braucht der rjmp? Sind die (ich glaube es sind) 2 Takte
> wirklich das entscheidende Kriterium für deine Anwendung?

Ja, ich mein auch, es sind 2 Takte. In dem speziellen Fall stört nicht 
die Dauer der ISR, sondern die Tatsache, dass sie dann einen für mich 
wichtigeren Interrupt mehrere Takte lang blockieren würde.

Letztlich würde es mir reichen, wenn in der Vektortabelle ein SEI vor 
dem RJMP steht. ISR_NOBLOCK macht zwar dasselbe, aber vermutlich auch 
erst nach dem Jump.

Ich werd mir da etwas anderes einfallen lassen müssen. Rein Assembler 
geht bei diesem Projekt schlecht, der Aufwand ist einfach zu hoch, es 
komplett umzukrempeln.

Auf alle Fälle danke für die Hilfe! Jetzt weiß ich wenigstens, in welche 
Richtung sich das Weiterforschen eher nicht lohnt. :-)

Markus

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.