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.
Warum in die Ferne schweifen... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts
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.
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?
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.
es wurde im GCC wieder geändert, im aktuellen Tutorial stehts auch drin... Mit Umbenennung nach ISR und Namensprüfung, sehr schick.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.