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


von Ulrich H. (ulhi)


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.

von Patrick (Gast)


Lesenswert?


von 1391 (Gast)


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.

von Simon K. (simon) Benutzerseite


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?

von JojoS (Gast)


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.

von JojoS (Gast)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.