mikrocontroller.net

Forum: Compiler & IDEs Interrupt wird beim linken nicht in den interrupt vektor eingetragen


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
00000000 <__vectors>:
   0:  12 c0         rjmp  .+36       ; 0x26 <__ctors_end>
   2:  2c c0         rjmp  .+88       ; 0x5c <__bad_interrupt>
   4:  2b c0         rjmp  .+86       ; 0x5c <__bad_interrupt>
   6:  2a c0         rjmp  .+84       ; 0x5c <__bad_interrupt>
   8:  29 c0         rjmp  .+82       ; 0x5c <__bad_interrupt>
   a:  28 c0         rjmp  .+80       ; 0x5c <__bad_interrupt>

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

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!

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsche Ausgabedatei angeguckt?  Wenn ich dein main.c mit -mmcu=
atmega8 compiliere und linke und das Ergebnis disassembliere, dann
bekomme ich:

main.elf:     file format elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
   0:   12 c0           rjmp    .+36            ; 0x26 <__ctors_end>
   2:   21 c0           rjmp    .+66            ; 0x46 <__bad_interrupt>
   4:   20 c0           rjmp    .+64            ; 0x46 <__bad_interrupt>
   6:   1f c0           rjmp    .+62            ; 0x46 <__bad_interrupt>
   8:   1f c0           rjmp    .+62            ; 0x48 <__vector_4>
   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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir wurde im anderen Thread doch schon gesagt, dass das offenbar ein 
Toolchain-Bug ist, und dass du eine neuere Toolchain benutzen sollst. 
Auch habe ich dir dort Hinweise gegeben, wie/wo du eine aktuelle 
Toolchain für Linux bekommst.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_avrd...

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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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_avrd...

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/

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias schrieb:
> Welche Versionen (gcc) sind denn aktuell?

Mindestens 4.3.x, 4.4.x wäre gewissermaßen "brandneu".

Weiß nicht, was Cliff Lawson da genau liefert, Bingo600 ist auch
eine Standardgröße:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch schrieb:

> Weiß nicht, was Cliff Lawson da genau liefert, Bingo600 ist auch
> eine Standardgröße:

Das sind fertige Deb-Pakete aus eben jenen Bingo-Skript (und auch von 
Bingo selbst erstellt). Hier der Thread dazu:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst schrieb:
> Das sind fertige Deb-Pakete aus eben jenen Bingo-Skript (und auch von
> Bingo selbst erstellt).

Ah, OK.  Er hatte mir mal geschrieben, dass er sowas baut, aber mir
war nicht klar, dass Cliff die bei sich verteilt.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias schrieb:
> Das script von Bingo600 konnte ich zwar nicht unter OpenSuse11.2 zum
> laufen bringen.

Dann schick' ihm 'ne Mail, einschließlich der Fehlermeldungen.

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.