mikrocontroller.net

Forum: Compiler & IDEs Problem bei Interrupt - falscher Code wird ausgeführt (mega


Autor: D. D. (daniel_dd)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein prinzipielles Problem mit der verwendung von Interrupts
und hoffe, dass mir Jemand helfen kann.

In meinem Quellcode will ich, dass die Interruptroutine durch einen
Taster ausgelöst wird Das erspare ich mir zu Testzwecken indem ich INT0
Softwaremäßig auslöse - funktioniert aber auch per Taster).

Mein Problem:
Wenn der Interrupt-0 ausgelöst wird, wird nicht der Code in :

SIGNAL(SIG_INTERRUPT0)
{
...
}

sondern der in main() ausgeführt.

Ich habe schon jegliche Variante (Vor allem in verwendung der
Interrupts des USARTs) versucht! Auch Beispielcode aus dem Netz hat bei
mir nicht funktioniert. Liegt das an meinen FUSEs oder gar an meinem
Prozessor?

Ich verwende einen AVRmega8 mit AVR-GCC auf einem
EmbedIT-Application-Board.

Danke für schelle Hilfe!!!

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

Bewertung
0 lesenswert
nicht lesenswert
> ...sondern der in main()

Das heißt, dass der default-Interruptvektor zugeschlagen hat.

Mit welcher Kommandozeile linkst du denn, steht da ein -mmcu=atmega8
mit drin?

Btw., ein externer Interrupt für einen Taster ist mittelmäßig
unsinnig, da mechanische Taster immer prellen.  Da man das nur
zeitgesteuert entprellen kann, kann man für die Abfrage des
Tasters dann auch gleich den Timerinterrupt benutzen.

Autor: D. D. (daniel_dd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mit welcher Kommandozeile linkst du denn, steht da ein -mmcu=atmega8
> mit drin?

Ich erstelle mein Programm wie folgt:
C:\Programme\WinAVR\bin\avr-gcc.exe
C:\HOME\MICROCONTROLLER\C\INTERRUPT-1\INTERRUPT-1.CPP
-mmcu=atmega8
-oC:\HOME\MICROCONTROLLER\C\INTERRUPT-1\INTERRUPT-1.HEX

(Ich weiß, besser währ es mit einem Makefile, damit werde ich mich in
Zukunft noch befassen)

> Btw., ein externer Interrupt für einen Taster ist mittelmäßig
>unsinnig,...

Du hast Recht! Habe es jetzt einfachheitshalber nur so gemacht um
schnell mal zu Testzwecken einen Interrupt auszulösen. Sonst hättte ich
die Interrupts vom USART verwendet, da das leider auch noch nicht geht,
fange ich erst mal simpel an.

Danke

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

Bewertung
0 lesenswert
nicht lesenswert
Ups, und du bist dir sicher, dass bei obigem Konstrukt ein
Intel-Hex-File rauskommt?  Ich denke, dass du damit nur ein
ELF-File produzierst.

Klemmt eigentlich deine CAPSLOCK-Taste? :-)

Ich bin mir übrigens gar nicht ganz sicher, ich denke mal, dass
.CPP keine offizielle Dateiendung ist, die der GCC vernünftig
interpretiert.  .cpp würde er als C++ interpretieren, aber ist
das eigentlich, was du willst?

> Ich weiß, besser währ es mit einem Makefile

Wenn du ein WinAVR hast, ist doch nun wirklich alles dabei, was
du zur Erstellung eines Makefiles brauchst.  Die ganzen dummen
Kasperfallen werden dir dabei praktisch automatisch abgenommen.
Aber Vorsicht!, bitte gewöhn' dir eine vernünftige Groß-/Klein-
Schreibung an.

Autor: Kai Klenovsek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da hat Jörg vollkommen Recht. Einfacher als mit dem Demo Makefile oder
mit MFile gehts nun wirklich nicht mehr. Du brauchst lediglich Deinen
Controllertypen eintragen und Deine *.c Quelldateien. Desweiteren ist
alles schön dokumentiert.

Ciao,
Kai

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich bin mir übrigens gar nicht ganz sicher, ich denke mal, dass
> .CPP keine offizielle Dateiendung ist, die der GCC vernünftig
> interpretiert.  .cpp würde er als C++ interpretieren, aber ist
> das eigentlich, was du willst?

Übrigens würde auch .C als C++ interpretiert werden. Es müßte schon .c
sein, damit er es als C-Code sieht. Alternativ kann man auch mit dem
Kommandozeilenparameter -x die Sprache explizit angeben.
Außerdem sollte man, wenn es wirklich C++ ist, mit g++ arbeiten statt
mit gcc.

Autor: D. D. (daniel_dd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt endlich Zeit gefunden eure Tipps auszuprobieren.

Der Tipp mit dem Makefile hat mein Problem SOFORT gelöst! Da wird
gleich der Code gleich viel kleiner!

Faulheit und kleine Fehler werden beim Programmieren echt böse bestraft
;-)

DANKESCHÖN für die promte Hilfe!!!

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.