www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ISR Vektortabelle


Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich ich habe bis jetzt immer in C programmiert, muss jetzt aber bei
einem neuen Projekt (Comtroller: MEGA 16) auf Assembler umsteigen
(wegen Timing).

Habe eine Tabelle laut Datenblatt erstellt, jedoch springt er bei einem
Timeroverflow nicht in dir Richtige Spalte. Habe alles nochmals
kontrolliert und scheint auch zu stimmen.

mfg

Alex

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich meine natürlich Zeile, NICHT Spalte.....

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist dir bewusst, dass ab 16kB Flash die Vektoren im Doppelwort-Abstand
liegen? Für jeden Eintrag sind also 2 Worte reserviert, damit der
Befehl JMP drin Platz hat.

Da ich zwecks unfragmentierter Hexdatei darauf verzichte, jeden
einzelnen Eintrag mit .ORG zu adressieren, sieht meine Sprungtabelle
bei Mega16-Programmen anfangs so aus:

.org 0              ;Reset- und Interrupt-Vektoren AT-Mega 16
 jmp RESET          ;Reset Handler
 jmp nix ;EXT_INT0       ;IRQ0 Handler
 jmp nix ;EXT_INT1       ;IRQ1 Handler
 jmp nix ;TIM2_COMP      ;Timer2 Compare Handler
 jmp nix ;TIM2_OVF       ;Timer2 Overflow Handler
 jmp nix ;TIM1_CAPT      ;Timer1 Capture Handler
 jmp nix ;TIM1_COMPA     ;Timer1 CompareA Handler
 jmp nix ;TIM1_COMPB     ;Timer1 CompareB Handler
 jmp nix ;TIM1_OVF       ;Timer1 Overflow Handler
 jmp nix ;TIM0_OVF       ;Timer0 Overflow Handler
 jmp nix ;SPI_STC        ;SPI Transfer Complete Handler
 jmp nix ;USART_RXC      ;USA RT RX Complete Handler
 jmp nix ;USART_UDRE     ;UDR Empty Handler
 jmp nix ;USART_TXC      ;USART TX Complete Handler
 jmp nix ;ADC            ;ADC Conversion Complete Handler
 jmp nix ;EE_RDY         ;EEPROM Ready Handler
 jmp nix ;ANA_COMP       ;Analog Comparator Handler
 jmp nix ;TWSI           ;Two-wire Serial Interface Handler
 jmp nix ;EXT_INT2       ;IRQ2 Handler
 jmp nix ;TIM0_COMP      ;Timer0 Compare Handler
 jmp nix ;SPM_RDY        ;Store Program Memory Ready Handler
nix:                ;Interrupt nicht genutzt
 reti                   ;zurück...

Für die Interrupts, die ich dann brauche, schreibe ich ISRs und nehme
das 'nix ;' aus der Zeile raus. Während des Debuggens bekommt die
Routine 'nix' Debug-Code, um falsche Interrupts (Programmierfehler)
zu erkennen.

...

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Hannes, danke für dem Tip, jetzt funktionierts.

ich hatte in meiner Tabelle nur ein reti stehen, das mit dem Doppelwort
hatte ich nicht bedacht.

mfg

Alex

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich hatte in meiner Tabelle nur ein reti stehen,

Das hatte ich vermutet... ;-)

...

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@HannesS

Ich hab jetzt hin und her überlegt, wie Du das meinst:

>... schreibe ich ISRs und nehme das 'nix ;' aus der Zeile raus

denn es gibt nach meiner Meinung einen Grundlegenden Unterschied.

Du schreibst:

>.org 0              ;Reset- und Interrupt-Vektoren AT-Mega 16
> jmp RESET          ;Reset Handler
> jmp nix ;EXT_INT0       ;IRQ0 Handler
> jmp nix ;EXT_INT1       ;IRQ1 Handler
> jmp nix ;TIM2_COMP      ;Timer2 Compare Handler
> jmp nix ;TIM2_OVF       ;Timer2 Overflow Handler
> .
> .
> .
> nix:                ;Interrupt nicht genutzt
> reti                   ;zurück...

_____________________________


Und das wäre der etwas umständliche Weg mit den "org":


.org 0          ;Startadresse=0
rjmp RESET     ; Reset Handler
.org $002 reti;rjmp EXT_INT0   ; IRQ0 Handler
.org $004 reti;rjmp EXT_INT1   ; IRQ1 Handler
.org $006 rjmp EXT_INT2   ; IRQ2 Handler  <= der wäre aktiv !!
.org $008 reti;rjmp TIM2_COMP   ; Timer2 Compare Handler
.
.


Bernhard

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Berhard: Das mit den .org's hat aber leider den Nachteil, dass du
Fehlerhafte Interrups nicht bearbeiten kannst.

>Während des Debuggens bekommt die
>Routine 'nix' Debug-Code, um falsche Interrupts (Programmierfehler)
>zu erkennen.

MFG

Kai

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard & Kai:

Ihr habt Beide Recht, aber der Hase liegt ganz woanders im Pfeffer.

Schaut euch mal die Hexdatei eines Programms an, bei dem mit '.org'
Adressen übersprungen werden. Diese ist dann nämlich fragmentiert, weil
die übersprungenen Adressen undefinierte Werte haben. Das ist aber erst
das halbe Problem.

Ich hatte zu einer Zeit, als ich noch keinen WWW-Zugang hatte, mein
eigenes ISP-System (Hardware und Software) geschrieben. den
grundlegenden Aufbau der (unfragmentierten!!) Hexdatei habe ich durch
Versuche ermittelt. Meine ISP-Soft kommt mit diesen linearen
Speicherbereichen beim Einlesen der Hexdateien klar, es verheddert sich
aber bei fragmentierten Hexdateien. Und da ich bisher noch keine Lust
hatte, die Einleseroutinen neu zu schreiben, vermeide ich einfach
fragmentierte Hex-Dateien.

So einfach sind die Gründe manchmal...

;-)

...

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@HanneS

>Schaut euch mal die Hexdatei eines Programms an, bei dem mit '.org'
>Adressen übersprungen werden. Diese ist dann nämlich fragmentiert

>So einfach sind die Gründe manchmal...

Du hast Recht, so einfach ist es, jetzt hab' ich's kappiert :)

Guter Tipp

Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.