www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts -> Anfängerfrage


Autor: Ulrich H. (ulhi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin Anfänger und würde gerne wissen wie das mit den Interrupts 
funktioniert. Möchte mit ATMEGA 8\16\32... programmieren. Mir ist klar 
das ich
hier keine genaue Antwort bekommen werde, aber ich hätte gerne ein paar 
Links, wo ich nachlesen kann wie das Funktioniert. Alles was ich bisher 
gefunden hab war entweder zu knapp beschrieben oder mit Assembler 
erklärt. Assembler kann ich aber nicht. Deshalb hätte ich gerne was in 
C.

Vielen Dank schon mal im vorraus.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: 1391 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein GCC tutorial ist nicht das Richtige. Und ASM braucht man fuer das 
Konzept auch nicht. Was ist ein Interrupt (=Unterbrechung)? Man hat 
einen normalen Programmablauf und nun moechte gewisse Hardware auf sich 
aufmerksam machen. Wie geschieht das ? Ja. Mit einem Interrupt. Das 
Programm wird unterbrochen, der Programmzaehler (=position) gespeichert 
und der Interruptvektor (=adresse des Interruptcodes) geladen. Die 
naechste Instruktion fehrt mit der Berarbeitung des Unterbrechungscodes 
fort. Dieser Code bearbeitet die Hardware, be welcher das noetig ist. zB 
ist ein byte von der seriellen Schnittstelle empfangen worden. Wenn die 
Hardware fertig bearbeitet wurde, wird der Interrupt verlassen und der 
vorherige Code weiter ausgefuehrt. Welche Sprache man nun braucht ist 
weniger wichtig als dass das Konzept begriffen wurde.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1391 wrote:
> Ein GCC tutorial ist nicht das Richtige.

Hä? Wo ist jetzt der Unterschied von deinem Textchen zu dem, der unter 
oben genanntem Link steht?

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in C muß der Compiler noch seine Arbeitsregister retten und 
wiederherstellen in der Interrupt Service Routine, in Assembler kan man 
das evtl. etwas feiner Optimieren. Und in C muß man aufpassen die 
richtigen Schlüsselwörter für die Interruptquellen zu benutzen, beim 
AVR/GCC habe ich da mal lange nach einem Fehler gesucht und es lag an 
einer Änderung der Namen. Mit der Hilfe im Tutorial ist die 
Interruptprogrammierung wirklich keine Hexerei.

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es wurde im GCC wieder geändert, im aktuellen Tutorial stehts auch 
drin... Mit Umbenennung nach ISR und Namensprüfung, sehr schick.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ulrich,

Du solltest vor allem begreifen, dass durch die Benutzung eines 
Interrupts Pseudo-Parallelitaet in Deinem Programm entsteht. Besonders 
aufpassen musst Du also, wenn Du in Interrupts gemeine Ressourcen mit 
dem Hauptprogramm teilst, um keine Synchronisationsprobleme zu bekommen. 
Das Wechseln zwischen verschiedenen ISRs und dem Hauptprogramm 
entspricht dem Prozesswechsel in einem Multitasking-System und bringt 
gewisse Probleme mit sich. Wenn Du spezielle Fragen hast, lass ruhig 
hoeren.


Michael

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.