Gast
#110095
Hallo,
so langsam bin ich völlig am verzweifeln, stehe mit dem uC auf
"Kriegsfuss" ;=)
Bevor ich mit was großem weiter mache, muss ich erwst weiter Grundlagen
lernen. Was ein Interrupt ist, was er macht, wer wann die Steuerung
übernimmt ist mir soweit klar. Einzig und allein zur Implementierung
(in C) habe ich eine Frage. Meinetwegen habe ich so etwas:
void main (void)
{
// Schleife die immer läuft
while (1)
{
// Schleife die nur läuft wenn der Interrupt ausgelöst wurde
while (interrupt_ausgeloest)
{
// mach was :=)
pause
Ports lesen
Ports schreiben
usw.
[...]
interrupt_ausgeloest = 0;
}
}
}
void Interruptroutine (void)
{
interrupt_ausgeloest = 1;
}
Was den Interrupt auslöst ist erstmal egal. Was ich letztendlich haben
möchte: wenn der Interrupt ausgelöst wurde, soll im Hauptprogramm eine
"extra-Schleife" abgearbeitet werden und zwar immer (!) vom Beginn ab
an. Obiges macht das ja fast soweit, nur was passiert wenn der Interrupt
2 mal "schnell" hintereinander ausgelöst wird? Soweit ich das
verstehe, passiert da nichts weiter, die while (interrupt_ausgeloest)
Schleife läuft einfach an der alten Stelle weiter (ok, das
Hauptprogramm wird unterbrochen, die Interruptroutine wird abgearbeitet
und das Hauptprogramm wird an der alten (!) Stelle fortgesetzt (also
nicht wie gewünscht von Beginn an)). Sie beginnt also nicht so wie von
mir gewünscht von vorne.
Wie kann ich dieses Problem lösen? Soll die ganze Interrupt-Schleife in
die Interruptroutine (was passiert dann bei 2 "schnellen"
Interrupts?), kann man die while schleife immer von Anfang an beginnen
(wäre mir am liebsten)?
Freue mich über jeden Tipp, Link, Codeschnipsel...
Gruß,
Hans