Hallo,
danke zunächst nochmal für eure Antworten.

Ich habe mittlerweile die neuesten Versionen installiert und zum laufen gebracht!

@Osser
Die Fehlermeldung "List index out of bounds" hat sich dadurch wirklich erledigt. Danke für den Hinweis!

@hai1991
Die Länge der Progs beträgt einzeln compiliert nur jeweils um die 45 Seiten.

Nun muss aber doch im Bereich der fahren Funktion noch ein Fehler sein!

Hier nochmal das Prog
Code:
#include "asuro.h"
#include "myasuro.h"

#define TRIGGERLEVEL 830
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1

volatile unsigned int i;

void Fahren(void)                               /* Vorwärts fahren */
{
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    MotorDir(FWD, FWD);
    while(PollSwitch()<1) {
        // Helligkeitswerte der Lichtschranken auslesen
        OdometrieData(data);
        // Wechsel linker Sensor von niedrig auf hoch?
        if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
            status[0]=HIGH;
            difference++;
        }
        // Wechsel linker Sensor von hoch auf niedrig?
        if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
            status[0]=LOW;
            difference++;
        }
        // Wechsel rechter Sensor von niedrig auf hoch?
        if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
            status[1]=HIGH;
            difference--;
        }
        // Wechsel rechter Sensor von hoch auf niedrig?
        if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
            status[1]=LOW;
            difference--;
        }
        // zur Sicherheit: verhindern, dass der Differenzz?ler
        // den erlaubten Wertebereich verl?st
        if (difference<-255) difference=-255;
        if (difference>255) difference=255;

        // Status-LED noch entsprechend der erkannten Segmente
        // aufleuchten lassen, grn fr links, rot fr rechts
        StatusLED(status[0]+status[1]*2);

        // Z?ldifferenz passend auf die Motoren verteilen
        if (difference>0) MotorSpeed(160-difference,160);
        else MotorSpeed(160,160+difference);
}


void Anhalten(void)                          /* Anhalten */
{
  StatusLED(RED);
  BackLED(OFF,OFF);
  MotorDir(BREAK,BREAK);
}

void Zurueck(void)                             /* Zurück fahren */
{
  Encoder_Init();
  Go(-10,200);
}


void KurveR(void)                          /* Kurve Rechts 90° */
{
 Encoder_Init();
 Turn(60,200);
}


void KurveL(void)                           /* Kurve rückwärts Rechts */
{
Encoder_Init();
Turn(-50,200);
}

void Drehung(void)                            /*180° Kurve*/
{
Turn(120,200);
}


void Firstcol(void)                        /* Programm Rechtskurve im Parcour 1. Kollision */
{
  Anhalten();
  Msleep(250);

  Zurueck();
  Msleep(15);

  Anhalten();
  Msleep(10);
    
  KurveR();
  Msleep(400);

  Anhalten();
  Msleep(250);
    
  switched = 0;
  StartSwitch ();
}

void Secondcol(void)                     /* Programm Linkskurve im Parcour, 2. Kollision */
{
  Anhalten();
  Msleep(250);

  Zurueck();
  Msleep(10);
    
  Anhalten();
  Msleep(250);

  Drehung();
  Msleep(355);

  Anhalten();
  Msleep(250);
    
  Anhalten();
  Msleep(250);
         
  switched = 0;
  StartSwitch();
} 
 
void Thirdcol(void)                        /* Programm Sackgasse im Parcour, 3. Kollision */
{
  Anhalten();
  Msleep(250);
                
  Zurueck();
  Msleep(10);
                
  KurveL();
  Msleep(310);
                
  Anhalten();
  Msleep(250);
                
  switched = 0;
  StartSwitch();

}

void Disco(void)                        /* PARTYTIME! -15mal blinken/piepsen-*/
{
 
  for(i = 0; i < 16; i++)
  {
   MotorDir(FWD,FWD);
   MotorSpeed(50,50);
   BackLED(OFF,OFF);
   StatusLED(OFF);
   FrontLED(OFF);
   Msleep(200);
   
   MotorDir(BREAK,BREAK);
   BackLED(ON,ON);
   StatusLED(RED);
   FrontLED(ON);
   Msleep(200);
   }
   
   
}


int main (void)                           /* Hauptprogrammbeginn */
{
  unsigned int data[2];                     /* Speicherplpatz für Helligkeitswert */
  unsigned int Summe;
  Init ();
  switched = 0;                           /* Kollisionserkennung auf 0 setzen */
  StartSwitch ();                        /* Taster-Interrupt aktivieren */
  FrontLED(ON);
  LineData(data);                         /* Speichern von Helligkeitswert in data[0,1] */
  Summe = data[0]+data[1];                  /* Summe der Werte beider Fototransistoren */
 
 
  while (1)
  {   
   if (switched == 1)                     /* Wenn 1. Kollision, dann Rechtskurve 90° aus */
    {
     
     Firstcol();
    
     for(i = 0; i < 25000; i++)            /* Setze Zeitschlaufe für 2. Kollision */
     {
      if (switched == 1)                  /* Wenn 2. Kollision, dann Drehung 180° */
        {
          Secondcol();
         
         for(i = 0; i < 25000; i++)         /* Setze Zeitschlaufe für dritte Kollision */
          {
            if (switched == 1)            /* Wenn 3. Kollision, dann Linksdrehung 90° */
             {
               Thirdcol();
             }

            else                     /* Keine 3. Kollision, Fahre normal */
             {
                  Fahren();
              } 
               
               
          }   
         
        }   
       
      else                           /* Keine 2. Kollision, Fahre normal */
       {
         Fahren();
       }
       

     }

      
                           
   }



   else                              /* gar keine Kollision, Fahre normal, Stopp bei Linie */
 {
     LineData(data);
     if(data[0]+data[1]+200 > Summe)         /* Untergrundhelligkeitsdifferenz feststellen */
   {
       Fahren();
     }
     else
     {
       Disco();                        /* Party gut - Alles gut */
     while(1)
    {}                              /* Endlosschleife - Ende des Programmes */
   }
  }
 }
 return 0;
 }
und das entsprechende Memo

Code:
>Session Environment Variables:
AF_AVRDIR=C:\WinAVR-20090306rc1
AF_PROJECT=Labyrinth
AF_SOURCE_FILES=asuro.c Labyrinth.c
AF_ASM_SRC_FILES=
AF_PRGDIR=C:\Program Files (x86)\AsuroFlash
AF_PRJDIR=C:\Documents and Settings\Administrator\Desktop\Asuro\Projekte\LMAA
AF_LIB_PATH=C:\AsuroLib
File asuro.c saved.
File asuro.h saved.
File myasuro.h saved.
File Labyrinth.c saved.
>Default make_all.cmd file created.
>Default makefile created.
Make
C:\Documents and Settings\Administrator\Desktop\Asuro\Projekte\LMAA>C:\WinAVR-20090306rc1\utils\bin\make all 
set -e; avr-gcc -MM -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\AsuroLib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="Labyrinth.lst" "Labyrinth.c" \
	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > "Labyrinth.d"; \
	[ -s Labyrinth.d ] || rm -f "Labyrinth.d"
set -e; avr-gcc -MM -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\AsuroLib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="asuro.lst" "asuro.c" \
	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > "asuro.d"; \
	[ -s asuro.d ] || rm -f "asuro.d"
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090306rc1) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\AsuroLib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="asuro.lst" "asuro.c" -o asuro.o
In file included from asuro.h:147,
                 from asuro.c:137:
c:/winavr-20090306rc1/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
asuro.c: In function 'PrintInt':
asuro.c:482: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I"C:\AsuroLib/inc" -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms="Labyrinth.lst" "Labyrinth.c" -o Labyrinth.o
In file included from asuro.h:147,
                 from Labyrinth.c:1:
c:/winavr-20090306rc1/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
Labyrinth.c: In function 'Fahren':
Labyrinth.c:175: warning: 'main' is normally a non-static function
Labyrinth.c:247: error: expected declaration or statement at end of input
make: *** [Labyrinth.o] Error 1


ExitCode 2
>Ready.
MfG
G3tzR@zor


Edit

Habe nun auch den Fehler im Programm gefunden!

In der fahren Funktion hat am Ende noch eine geschlossene, geschweifte Klammer gefehlt, wodurch natürlich der ganze rest des Programms mit eingebunden war.

So weit so gut, hab mich schon gefreut, dass es endlich geht und hab das Prog gleich mal auf meinen Asuro geflasht.

Nun fährt er, warum auch immer, nur noch rückwärts, die StatusLED leuchtet Rot und er reagiert auf keinen Taster.

Habt ihr habt eine Idee was nun an meinem Prog noch falsch ist.

Hier mal der fast funktionierende Code

Code:
#include "asuro.h"
#include "myasuro.h"

#define TRIGGERLEVEL 830
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1

volatile unsigned int i;

void Fahren(void)                               /* Vorwärts fahren */
{
    unsigned int data[2];
    signed int status[2]={0,0};
    signed int difference=0;
    MotorDir(FWD, FWD);
    while(PollSwitch()<1) {
        // Helligkeitswerte der Lichtschranken auslesen
        OdometrieData(data);
        // Wechsel linker Sensor von niedrig auf hoch?
        if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
            status[0]=HIGH;
            difference++;
        }
        // Wechsel linker Sensor von hoch auf niedrig?
        if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
            status[0]=LOW;
            difference++;
        }
        // Wechsel rechter Sensor von niedrig auf hoch?
        if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
            status[1]=HIGH;
            difference--;
        }
        // Wechsel rechter Sensor von hoch auf niedrig?
        if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
            status[1]=LOW;
            difference--;
        }
        // zur Sicherheit: verhindern, dass der Differenzz?ler
        // den erlaubten Wertebereich verl?st
        if (difference<-255) difference=-255;
        if (difference>255) difference=255;

        // Status-LED noch entsprechend der erkannten Segmente
        // aufleuchten lassen, grn fr links, rot fr rechts
        StatusLED(status[0]+status[1]*2);

        // Z?ldifferenz passend auf die Motoren verteilen
        if (difference>0) MotorSpeed(180-difference,180);
        else MotorSpeed(180,180+difference);           
}
}

void Anhalten(void)                          /* Anhalten */
{
  StatusLED(RED);
  BackLED(OFF,OFF);
  MotorDir(BREAK,BREAK);
}

void Zurueck(void)                             /* Zurück fahren */
{
  Encoder_Init();
  Go(-10,200);
}


void KurveR(void)                          /* Kurve Rechts 90° */
{
 Encoder_Init();
 Turn(60,200);
}


void KurveL(void)                           /* Kurve rückwärts Rechts */
{
Encoder_Init();
Turn(-50,200);
}

void Drehung(void)                            /*180° Kurve*/
{
Turn(120,200);
}


void Firstcol(void)                        /* Programm Rechtskurve im Parcour 1. Kollision */
{
  Anhalten();
  Msleep(250);

  Zurueck();
  Msleep(15);

  Anhalten();
  Msleep(10);
    
  KurveR();
  Msleep(400);

  Anhalten();
  Msleep(250);
    
  switched = 0;
  StartSwitch ();
}

void Secondcol(void)                     /* Programm Linkskurve im Parcour, 2. Kollision */
{
  Anhalten();
  Msleep(250);

  Zurueck();
  Msleep(10);
    
  Anhalten();
  Msleep(250);

  Drehung();
  Msleep(355);

  Anhalten();
  Msleep(250);
    
  Anhalten();
  Msleep(250);
         
  switched = 0;
  StartSwitch();
} 
 
void Thirdcol(void)                        /* Programm Sackgasse im Parcour, 3. Kollision */
{
  Anhalten();
  Msleep(250);
                
  Zurueck();
  Msleep(10);
                
  KurveL();
  Msleep(310);
                
  Anhalten();
  Msleep(250);
                
  switched = 0;
  StartSwitch();

}

void Disco(void)                        /* PARTYTIME! -15mal blinken/piepsen-*/
{
 
  for(i = 0; i < 16; i++)
  {
   MotorDir(FWD,FWD);
   MotorSpeed(50,50);
   BackLED(OFF,OFF);
   StatusLED(OFF);
   FrontLED(OFF);
   Msleep(200);
   
   MotorDir(BREAK,BREAK);
   BackLED(ON,ON);
   StatusLED(RED);
   FrontLED(ON);
   Msleep(200);
   }

   
}


int main (void)                           /* Hauptprogrammbeginn */
{
  unsigned int data[2];                     /* Speicherplpatz für Helligkeitswert */
  unsigned int Summe;
  Init ();
  switched = 0;                           /* Kollisionserkennung auf 0 setzen */
  StartSwitch ();                        /* Taster-Interrupt aktivieren */
  FrontLED(ON);
  LineData(data);                         /* Speichern von Helligkeitswert in data[0,1] */
  Summe = data[0]+data[1];                  /* Summe der Werte beider Fototransistoren */
 
 
  while (1)
  {   
   if (switched == 1)                     /* Wenn 1. Kollision, dann Rechtskurve 90° aus */
    {
     
     Firstcol();
    
     for(i = 0; i < 25000; i++)            /* Setze Zeitschlaufe für 2. Kollision */
     {
      if (switched == 1)                  /* Wenn 2. Kollision, dann Drehung 180° */
        {
          Secondcol();
         
         for(i = 0; i < 25000; i++)         /* Setze Zeitschlaufe für dritte Kollision */
          {
            if (switched == 1)            /* Wenn 3. Kollision, dann Linksdrehung 90° */
             {
               Thirdcol();
             }

            else                     /* Keine 3. Kollision, Fahre normal */
             {
                  Fahren();
              } 
               
               
          }   
         
        }   
       
      else                           /* Keine 2. Kollision, Fahre normal */
       {
         Fahren();
       }
       

     }

      

   }



   else                              /* gar keine Kollision, Fahre normal, Stopp bei Linie */
 {
     LineData(data);
     if(data[0]+data[1]+200 > Summe)         /* Untergrundhelligkeitsdifferenz feststellen */
   {
       Fahren();
     }
     else
     {
       Disco();                        /* Party gut - Alles gut */
     while(1)
    {}                              /* Endlosschleife - Ende des Programmes */
   }
  }
 }
 return 0;
 }
Danke schonmal im Vorraus für eure Hilfe!

MfG
G3tzR@zor[/code]