Interrupt wird beim linken nicht in den interrupt vektor eingetragen

Gast #1639176
Lesenswert?
• ▲
▼
Hallo,

beim linken von meinem Programm, wird der definierte TIMER2_OVF_vect 
nicht in das Interrupt Register eingetragen. Dadurch gibt es beim 
Interrupt immer einen Reset, da die Ausfuehrung des Programm wieder von 
vorne beginnt.

Bei mir steht im .lss file:
1
00000000 <__vectors>:
2
   0:  12 c0         rjmp  .+36       ; 0x26 <__ctors_end>
3
   2:  2c c0         rjmp  .+88       ; 0x5c <__bad_interrupt>
4
   4:  2b c0         rjmp  .+86       ; 0x5c <__bad_interrupt>
5
   6:  2a c0         rjmp  .+84       ; 0x5c <__bad_interrupt>
6
   8:  29 c0         rjmp  .+82       ; 0x5c <__bad_interrupt>
7
   a:  28 c0         rjmp  .+80       ; 0x5c <__bad_interrupt>

Es sollte aber so aussehen:
1
...
2
00000000 <__vectors>:
3
   0:  12 c0         rjmp  .+36       ; 0x26 <__ctors_end>
4
   2:  2c c0         rjmp  .+88       ; 0x5c <__bad_interrupt>
5
   4:  2b c0         rjmp  .+86       ; 0x5c <__bad_interrupt>
6
   6:  2a c0         rjmp  .+84       ; 0x5c <__bad_interrupt>
7
   8:  2a c0         rjmp  .+84       ; 0x5e <__vector_4>
8
   a:  28 c0         rjmp  .+80       ; 0x5c <__bad_interrupt>
9
...

Ich sehe aber nicht, woran das liegt. Anbei auch mein build output. Ich 
verwende die folgende toolchain:
#) binutils-2.20
#) gcc-4.1.2
#) avr-libc-1.6.8

Danke fuer die Hilfe!
Angehängte Dateien:
Moderator Persönliche Seite #1639346
Lesenswert?
• ▲
▼
Falsche Ausgabedatei angeguckt?  Wenn ich dein main.c mit -mmcu=
atmega8 compiliere und linke und das Ergebnis disassembliere, dann
bekomme ich:
1
main.elf:     file format elf32-avr
2

3

4
Disassembly of section .text:
5

6
00000000 <__vectors>:
7
   0:   12 c0           rjmp    .+36            ; 0x26 <__ctors_end>
8
   2:   21 c0           rjmp    .+66            ; 0x46 <__bad_interrupt>
9
   4:   20 c0           rjmp    .+64            ; 0x46 <__bad_interrupt>
10
   6:   1f c0           rjmp    .+62            ; 0x46 <__bad_interrupt>
11
   8:   1f c0           rjmp    .+62            ; 0x48 <__vector_4>
12
   a:   1d c0           rjmp    .+58            ; 0x46 <__bad_interrupt>

GCC 4.1.2 ist natürlich irgendwie reichlich alt (fast 4 Jahre).  Wenn
du die (beinahe aktuellen) binutils 2.20 benutzt, warum dann dazu so
einen alten Compiler?
Gast #1639395
Lesenswert?
• ▲
▼
Hallo,

habe meine alte toolchain ja auch entfernt und dann genau auf der 
angegebenen Seite alles nach Anleitung neu installiert. Und zwar von 
hier:

http://www.rn-wissen.de/index.php/Avr-gcc_und_avrdude_installieren

Dort wird halt auf den gcc-4.1.2 verwiesen und ich habe ihn genommen. 
Aber das war wohl doch nicht die beste Anleitung. Netterweise wird auch 
selten das Datum zu den Anleitungen hinzugefuegt.

Welche Versionen (gcc) sind denn aktuell?
#1639410
Lesenswert?
• ▲
▼
Matthias schrieb:

> habe meine alte toolchain ja auch entfernt und dann genau auf der
> angegebenen Seite alles nach Anleitung neu installiert. Und zwar von
> hier:
>
> http://www.rn-wissen.de/index.php/Avr-gcc_und_avrdude_installieren

Die Anleitung dort ist Schrott. Da wird der avr-gcc ja aus den 
offiziellen gcc-Quellen ohne irgendeinen der zusätzlichen AVR 
spezifischen Patches compiliert.

Nimm einfach ein deb-Paket von hier:
http://www.wrightflyer.co.uk/avr-gcc/
Gast #1641638
Lesenswert?
• ▲
▼
Hallo,

Danke fuer die gut Hilfe. Habe das Problem nun loesen koennen.

Das script von Bingo600 konnte ich zwar nicht unter OpenSuse11.2 zum 
laufen bringen. Habe daher eine gcc version 4.4.3 ohne patch 
installiert. Auch wenn hier wegen der fehlenden patches wohl noch einige 
Schwierigkeiten auftreten koennten, ist das Problem der nicht 
eingetragenen Interruptvektoren nun geloest.

Bin erstmal froh, dass ich nun einen Schritt weiter bin und meine 
Interruptprozeduren richtig aufgerufen werden. Also nochmals ein Dank an 
die fleissigen Poster hier, wirklich sehr hiflreich.

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.