Hallo Sternthaler,

ok, Du hast gewonnen, Du bist länger im Forum drin als ich .
Eigentlich wollte ich gar nicht lange drin sein. Dauert aber so verdammt lange einen Forum-Beitrag zu schreiben. Bin darüber jedes mal aufs Neue überrascht. Gehts Dir da ähnlich?

Ja, es kann zu "vernachlässigten Prozessen kommen". Aber, auch hier könnte man die Ansätze kombinieren. Wie gefällt Dir das Folgende (nur ca.):
Code:
/*----------------------------------------------------------------------
     Daten sammeln
*/
void PROZESS_DatenSammeln(void) {
static int v_status=0;
static long v_pause_bis;

	  if (v_taster != T_1) return;
	  
      if (v_status == 0)
      {
         v_LED = RED;                     // User sieht rot
         v_pause_bis = Gettime () + 1000; // Pausenzeit nach Taste losgelassen
         //sens.aktiv |= SENS_RAD;          // Rad-Sensoren starten
         md.i [LINKS]  = 0;               // Die ersten N Messungen verwerfen
         v_status++;
      }
      
      if (v_status == 1)
      {
         if (v_pause_bis < Gettime())     // Pausenzeit abwarten
         {
            v_LED = GREEN + BLINK;        // User warnen: Asuro faehrt los
            v_status++;
         }
      }

      if (v_status == 2)
      {
		    /* Motor starten und warten bis der MessDaten-Puffer voll ist */
		    drive (220, 220);   // Geradeaus soll es gehen
		    md.i [LINKS]  = 0;               // Die ersten N Messungen verwerfen
	        v_status++;
      }

      if (v_status == 3)
      {
   		 PositionBerechnen=1; //PROZESS_PositionBerechnen: Macht nur Sinn, wenn die Messdatenaufnahme laeuft.
   		 
         if (md.i [LINKS] == 20)    // Kurve einleiten
         {
            drive (100, 160);
         }
         if (md.i [LINKS] == 30)    // wieder geradeaus
         {
    		drive (220, 220);   // Geradeaus soll es gehen
         }
         if (md.i [LINKS] == 60)    // Kurve einleiten
         {
            drive (250, 140);
         }
         if (md.i [LINKS] == 70)    // wieder geradeaus
         {
   			drive (220, 220);   // Geradeaus soll es gehen
         }
         if (md.i [LINKS] >= MD_RECORD_ANZ - 1)
         {
		    drive (0, 0);            // Motor aus
		    //MotorDir   (BREAK, BREAK);
		    //sens.aktiv &= ~SENS_RAD;      // Rad-Sensoren stoppen
		
		    v_LED = RED + BLINK;          // User ist wieder daran
            v_status = 0;
    		PositionBerechnen=0;
		    v_taster=0;
         }
      }	
}

Das ist wahr, "die Struktur der AktionsList" und damit das Subsumption Framework hat sich stark vereinfacht. War viel zu viel Balast für die mit dem ASURO möglichen Programmgrößen.


Gruß rossir