Verschachtelte For Schleife pausieren und wieder fortsetzen

Gast #6069763
Hallo Leute,

ich habe ein Problem und mir fällt gerade keine elegante Möglichkeit 
ein, dass zu lösen.

Ich habe zwei verschachtelte For-Schleifen um x und y Verschiebung eines 
Messtisches zu ermöglichen. Das wird genutzt, um ein Raster zu 
vermessen. Jetzt würde ich gerne die Möglichkeit haben, diese Messung zu 
pausieren und später dort weiter zu machen. Auch soll vorgesehen werden, 
die Messung abbrechen zu können. Die Steuerung erfolgt über CAN. Das 
Einlsen der Botschaft per Interrupt. Das Decodieren der CAN Matrix und 
somit die Auswertung des Befehls aber außerhalb des Interrupts. Daher 
bräuchte ich sowas wie einen Interrupt für meine verschachtelten 
For-Schleifen. Kriege ich einen Interrupt durch die Can Botschaft, soll 
wenn die Botschaft komplett ist, in die Auswertung der Botschaft 
gesprungen werden und danach zurück in die aktuelle Position der 
For-Schleife, um ggf. dort mit dem ausgewerteten Kommando was tun zu 
können.

Wie kann man sowas lösen? Mir fällt jetzt nur ein, die aktuellen 
Positionen der For-Schleifen zu speichern, komplett die Schleifen zu 
verlassen. Die Auswertung zu machen und die Schleifen neu zu starten mit 
den zuletzt gespeicherten Werten. Dabei muss ich dann aber wieder 
Sonderfälle für die Initialisierung des Messequipment berücksichtigen, 
weshalb das erstmal nicht so schön wäre.

Gruß und Danke,
Sebastian
#6069783
Möglichkeit 3: Benutze keine verschachtelte For-Schleifen.
1
move to start position
2
loop:
3
  check CAN signals
4
  if CAN says stop:
5
    save current position
6
    exit loop
7
  
8
  measure at current postion
9

10
  step x
11
  if x is at end:
12
    move x to start pos
13
    step y
14
    if y is at end:
15
      exit loop
Gast #6069789
Sebastian schrieb:
> Daher
> bräuchte ich sowas wie einen Interrupt für meine verschachtelten
> For-Schleifen. Kriege ich einen Interrupt durch die Can Botschaft, soll
> wenn die Botschaft komplett ist, in die Auswertung der Botschaft
> gesprungen werden und danach zurück in die aktuelle Position der
> For-Schleife,

Das kann man doch durch polling innerhalb der inneren Schleife machen. 
Oder ist das zu lahm?
#6069793
Sebastian schrieb:
> Daher
> bräuchte ich sowas wie einen Interrupt für meine verschachtelten
> For-Schleifen.

Nein.

Du musst nur programmieren lernen.

Deine Programm-Huptschleife, nennen wir sie loop, zählt einfach in 2 
Dimensionen:
1
loop()
2
{
3
  // mache was auf Zelle x,y
4
  x++; if(x>maxx) { x=0; y++; if(y>maxy) y=0;
5
  // bearbeite ev. Neupositionierung die per CAN reinkam
6
}
#6071913
Man schreibt die Schleife nicht als Schleife, sondern als Funktion, die 
je Aufruf nur eine Iteration macht.
Die Variablen definiert man static, somit bleiben sie erhalten.
Über Argumente bestimmt man, ob sie fortsetzen soll oder neu starten.
Nun ruft man diese Funktion im Wechsel mit der CAN-Funktion in der 
Mainloop auf.
Gast #6072022
Was soll denn am Ende der for-Schleife passieren, wenn sie ohne 
Interrupt durchlaufen sein sollte?

Ist das folglich überhaupt das richtige Mittel der Wahl oder braucht man 
nicht eine ganz andere Umsetzung?
Gast #6096289
Man könnte die Berechnungen in einem niederprioren Interrupt ausführen 
und das Flag für Aktivieren dieses Interrupts wahlweise manchmal 
ausschalten.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.