Hallo

Großes Lob, weil dein Programm fehler- und warnungsfrei übersetzt werden kann. Großer Tadel: Wo sind die Kommentare?

Ich habe dein Programm nochmals umformatiert:
PHP-Code:
#include "asuro.h"
#include "myasuro.h"

int main(void)
{
    
unsigned int odata[2];
    
unsigned int ldata[2];
    
int a;
    
int b;
    
int c;
    
int d;
    
int e;
    
int f;

    
Init();
    
FrontLED(ON);
    while(
1)
    {
        
MotorDir(FWD,FWD);
        
a=1;
        
c=1;
        
d=1;
        while(
a)
        {
            
LineData(ldata);
            if (
ldata [0] > ldata [1])
            {
                
MotorSpeed(200,100);
            }
            else if (
PollSwitch()>0)
                {
                    
a=0;
                }
                else
                {
                    
MotorSpeed(100,200);
                }
        }
        return(
0);
        for (
b=0b<40b++)
        {
            
BackLED(OFF,ON);
            
Msleep(1);
            
BackLED(OFF,OFF);
            
Msleep(19);
        }
    }
    {
        
OdometrieData(odata);
        if (
odata[0] > 500)
        {
            {
                
MotorSpeed(0,200);
                
Msleep(1000);
                
MotorSpeed(200,200);
            }
            while(
c)
            {
                
LineData(ldata);
                if (
ldata [0] > ldata [1])
                {
                    
MotorSpeed(200,100);
                }
                else if (
PollSwitch()>0)
                    {
                        
c=0;
                        for (
f=0f<40f++)
                        {
                            
BackLED(OFF,ON);
                            
Msleep(2);
                            
BackLED(OFF,OFF);
                            
Msleep(18);
                        }
                    }
                    else
                    {
                        
MotorSpeed(100,200);
                    }
            }
        return(
0);
        }
        {
            
MotorSpeed(100,200);
            
Msleep(1000);
            
MotorSpeed(200,200);
        }
        
OdometrieData(odata);
        if (
odata[0] < 500)
        {
            {
                
MotorSpeed(200,0);
                
Msleep(1000);
                
MotorSpeed(200,200);
            }
            while(
d)
            {
                
LineData(ldata);
                if (
ldata [0] > ldata [1])
                {
                    
MotorSpeed(200,100);
                }
                else if (
PollSwitch()>0)
                    {
                        
d=0;
                        for (
e=0e<40e++)
                        {
                            
BackLED(OFF,ON);
                            
Msleep(2);
                            
BackLED(OFF,OFF);
                            
Msleep(18);
                        }
                    }
                    else
                    {
                        
MotorSpeed(100,200);
                    }
                }
            return(
0);
        }
        {
            
MotorSpeed(100,200);
            
Msleep(1000);
            
MotorSpeed(200,200);
        }
    }
    return(
0);

Man sieht nun deutlich die extreme Verschachtelung und die Wiederholungen der einzelnen Programmteile. Vielleicht solltest du mal den Ablauf analysieren:

Folge_Line_bis_Becher_erkannt_wird();
Schliesse_Greifer();
Links_oder_Rechts_abbiegen();
Folge_Line_bis_Becher_erkannt_wird();
Öffne_Greifer();

Das sollte es im Wesentlichen sein. Es soll wohl sowas werden:



btw: return in main() beendet das Programm sofort!!!

Gruß

mic