www.mikrocontroller.net

Forum: Compiler & IDEs Interrupts werden nicht ausgeführt


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider werden meine Interrupts nicht ausgeführt, sie sollen eine LED zu 
Blinken mit 0.5Hz bringen am Port B1. Leider kommt es nicht zum 
Interrupt.

Was ist denn da los, denn das Programm lief auf einem anderen Controller 
schon?

Hat jemand einen Tip?

Das Makefile sieht so aus:

MCU=atmega8

all:  logger.S
  avr-gcc -mmcu=${MCU} logger.S -o logger.elf
  avr-objcopy -O ihex logger.elf logger.hex

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: HUE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was soll ich jetzt beschreiben: Mein Programm funktionierte über 2 Jahre 
ohne Zwischenfall. Ich hatte dies unter NetBSD mit tavrasm und avrdude 
erzeugt und geladen.

Heute will ich das gleiche Programm nochmal auf einen Controller bringen 
und benutze OpenBSD mit den avr-gcc und ich bekomme es nicht zum Laufen. 
Ich vermute in den Deklarationen im logger.S sind noch einige Fehler, so 
daß meine Interrupts nicht starten, die erzeugen das Blinksignal am 
Port.

Ich hoffe ich konnte jetzt etwas konkreter werden.

MfG

HUE

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hoffe ich konnte jetzt etwas konkreter werden.

Nein.

Beitrag ""Hilfe", "funktioniert nicht", funktioniert nicht."

Punkte 1, 3 und folgende.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HUE schrieb:

> Was ist denn da los, denn das Programm lief auf einem anderen Controller
> schon?

Anderer Typ?

Dann die Konfigurationswerte für die Spezialfunktionsregister anhand der 
Datenblätter kontrollieren

Anderes Exemplar?

Fuses kontrollieren. Der µC soll lt. Programm mit 16 MHz laufen. Ab Werk 
kommt er aber mit 1 MHz. Pi*Daumen: Statt 0,5 Hz Blinken, wäre es dann 
ein 0,03125 Hz Blinken... vielleicht zu langsam für den ungeduldigen 
Tester.

Autor: HUE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auf dem Board habe ich ein 16Mhz Quartz verbaut und die LED leuchtet, 
wenn ich sie in der loop: setze -> Controller läuft!

Wenn ich den Watchdog noch mit 2,1 sec setze, dann wird dieses 
Dauerleuchten nach 2,1 sec unterbrochen, aber nicht mit 0.5 Hz.

Also läuft mein Timer 0 nicht in eine ISR und bringt sie zum Wechseln 
des Status. Dort würde ich auch den Watchdog zurücksetzen.

So funktionierte das über Jahre ohne Ausfälle!

Hat noch jemand eine Idee?

MfG

HUE

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja. Rätselhaft das Ganze.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Teufelskreis!

Fast wie im richtigen Leben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HUE schrieb:
> Hallo,
>
> auf dem Board habe ich ein 16Mhz Quartz verbaut

Das heißt noch lange nicht, dass der µC auch mit 16Mhz läuft.

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal wieder ein volatile Problem, da der aktuelle gcc besser optimiert?

Autor: HUE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hat nicht jemand einen Vorschlag, wie die Kopfzeilen von logger.S für 
die Compileranweisungen auszusehen haben?

MfG

HUE

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schaut man sich die Ausgabe von deinem make mit deinem Makefile im AVR 
simulator (AVR Studio) an, sieht man ZWEI Interrupttabellen. Zuerst 
eine vom avr-gcc erzeugte und dann deine. Klar, dass deine nie 
angesprungen wird.

Wie kann man nun avr-gcc veranlassen keine Interrupttabelle zu 
schreiben?

Die Lösung habe ich in einem Beitrag von Jörg Wunsch gefunden:
Beitrag "Re: AVR-GCC in Assembler-Modus"

Man muss explizit ohne C-Startupcode linken! Ich habe dazu dieses 
Makefile (s. Anhang mit Tabs) benutzt:

MCU=atmega8

all:  logger.S
  avr-gcc -mmcu=${MCU} -c logger.S 
  avr-ld -mavr2 logger.o -o logger.elf
  avr-objcopy -O ihex logger.elf logger.hex


Das Blinken im Logger lässt sich dann mit dem AVR Studio simulieren. Man 
braucht allerdings etwas Geduld bis in der Simulation die Wartezeiten im 
Timer abgelaufen sind.

Autor: HUE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke, Danke, Danke...

MfG

Volker Wolfram

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.