-
-
Moderator
Robotik Einstein
interrupts werden aufgerufen von einem ereignis, z.B. wenn die taster gedrückt werden. also wird die main funktion abgearbeitet, und wenn ein taster gedrückt wird dann hat die main funktion sozusagen pause und die interrupt-routine wird abgearbeitet. wenn die fertig ist, dann geht der prozessor wieder zu der stelle zurück, an der er stehen geblieben ist und macht die main funktion weiter.
bei der programmierun kann ich dir leider nicht helfen, da musst du mal abwarten...
-
Neuer Benutzer
Öfters hier
Aah, praktische Funktion... Ja so ein Beispiel wäre jetzt nicht schlecht.
KAnn mir da einer weiterhelfen?
-
Neuer Benutzer
Öfters hier
ich Suche immernoch Hilfe
-
Moderator
Robotik Einstein
da hilft schieben aber gar nix... benenn den thread um in "suche hilfe bei interrupt-programmierung", das könnte helfen. (deinen ersten post bearbeiten und dne titel ändern)
-
Erfahrener Benutzer
Roboter Experte
ähem. also wenn du jetzt einfach den thread umbenennst, hast du das problem, das die alten beiträge ja nicht verschwinden. das sieht jetzt ein bisschen merkwürdig aus.
mfg EDH
-
Moderator
Robotik Einstein
Macht nix... ich zum beispiel klicke immer gleich auf "zum letzten beitrag".
ausserdem sollte das hier keine bedienungsanleitung für das forum sien sondern eine hilfesuche bei der interruptprogrammierung =)
ansonsten: neuen thread (nach benutzuing der suche) aufmachen. irgend jemand muss das hier doch können... ich versuch mich mal da reinzulesen.
-
Neuer Benutzer
Öfters hier
-
Moderator
Robotik Einstein
Soooo dann will ich dir mal was über interrupts erzählen...
(habe mich selbst dmit noch nicht befasst; ich lese quasi nur vor was ich rausgefunden hab..)
Folgende Interrupts gibt es:
SIG_INTERRUPT0 //kann von einer Erweiterungsplatine genutzt werden
SIG_INTERRUPT1 //Wird von den Tastern verwendet. Dieser Interrupt wird nur dann ausgelöst, wenn vorher StartSwitch() aufgerufen wurde, und wird nicht mehr ausgelöst nachdem StopSwitch() aufgerufen wurde.
SIG_OUTPUT_COMPARE2 //Sowie der Counter2 einen bestimmten Wert erreicht hat, wird dieser Interrupt ausgelöst.
SIG_OVERFLOW2 //Wenn der Counter Überläuft (bzw wieder 0 ist, weil er seinen maximalen Wert Erreicht hat)
(es gibt noch einige andere interrupts, aber die spare ich mir jetzt hier. genaueres dazu im Buch "MEHR SPAß MIT ASURO I".
um zu definieren, was beim auslösen eines interrupts (z.B. dem Tasterinterrupt) passieren soll, mach folgendes:
SIGNAL(SIG_INTERRUPT1)
{
Hier deine anweisungen... vergiss auf keinen fall, dass hier StopSwitch stehen muss, sonst wird diese Routine in alle ewigkeiten ausgeführt weil die taster ja immer gedrückt bleiben und der interrupt somit ewig ausgelöst wird.
Beispiel:
Hindernis_entdeckt=1;
StopSwitch();
}
... und in der Main Funktion wird dann, sowie hindernis_entdeckt nicht mehr null ist, eine entsprechende Maßnahme eingeleitet.
Beispiel: die Sleep-Funktion. (nicht Msleep!)
Der Interrupt SIG_OUTPUT_COMPARE2 wird 36000mal pro sekunde aufgerufen. die Routine dazu sieht folgendermaßen aus:
SIGNAL(SIG_OUTPUT_COMPARE2)
{
count36kHz++;
}
Die Variable count36kHz wird also 36000x pro sekunde um eins erhöht.
die Sleep-Funktion sieht folgendermaßen aus:
void Sleep(unsigned char time36kHz)
{
count32kHz=0; //Die Variable, die 36000x pro sekunde erhöht wird, wird auf null gesetzt
while(count36kHz < time36kHz); // in dieser while schleife bleibt der Prozessor so lange, bis count36kHz so weit hoch gezählt wurde dass sie größer ist als time36kHz (der Parameter der Sleepfunktion)
}
Die Sleep Funktion wartet also time36kHz mal 1/36000 sekunden, bevor das programm weiter läuft. und weil in der sleep funktion nur der startwert 0 und die bedingung zum verlassen der schleife steht, wird mit einem 36000mal pro sekunde ausgelöstem interrupt die variable erhöht, um irgendwann wieder rauszukommen aus der sleep funktion.
was noch wichtig ist:
mit sei(); werden alle Interrupts aktiviert.
mit cli(); werden alle interrupts deaktiviert (ACHTUNG! hier kann z.B. die Sleep Funktion eine endlosschleife werden, schliesslich wird count36kHz ja nicht mehr erhöht...)
so ich hoffe, das hilft dir ein wenig... schreib mir wenn nicht =)
viel Glück!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen