ich habe zwar seit einem weilchen nichtmehr erfolgreich kompiliert aber
mir ist aufgefallen dass meine HEX datei 8kB groß ist .....
das beunruhigt mich...

das hier ist mein programm...
es ist mit vielen globalen variablen und ohne zeiger programmiert
.. da wäre vermutlich noch etwas komprimiermöglichkeit
außerdem habe ich einige INT's wo chars reichen würden..
aber ist dieses programm wirklich schon fast zu groß für den ASURO

Code:
#include <asuro.h>
#include <i2cmaster.h> 

#define  I2C_PORTERW 0x40 
#define  I2C_ADC  0xC8   
#define  TASTE1   0x01
#define  TASTE2	  0x02
#define  BOTH     0x00
#define  NONE     0x03
#define  SEC2     0xFF
/* MODUS : 
	0...	Stop
	1...	Folge Linie
	2...	Suche Lichtquelle
	3...	Freestyle zur zeit STOP
	4...	Langsame Geschwindigkeit
	5...	Schnelle Geschwindigkeit
	
*/
void i2c_startConfig(void);
void i2c_setPorterw(unsigned char chooseRegister,unsigned char wert);
unsigned char i2c_readPorterw(void);
void Drive (void); // is set by global Speed
volatile int driveEnable=0;
volatile int measure;
volatile int checkTasten=0;
volatile int modus=0;
volatile int speed=200;

int main(void)
{
	Init();
	i2c_init();					// initialize I2C library
	
	sei();
	MCUCR|=0x03;
	MCUCR&=0xF7;
	SREG|=0x80;
	GICR|=0x40; 
	TCCR0|=0x07;
	TCCR0=0xFC;
	TIMSK|=0x01; 
	EncoderInit();
	i2c_startConfig();
	//unsigned char ret;
	while (1)
	{
		
		if(modus==0 || modus==3)
		{	MotorDir(BREAK,BREAK);
		}
		else if(modus==1)
		{	//Linienfolge
		}
		else if(modus==2)
		{	//Lichtsuche
			if(driveEnable)
			{	Drive();
			}
		}
		else if(modus==4)
		{	//Geschwindigkeit Langsam
			speed=100;
			modus=0;
			
		}
		else if(modus==5)
		{	//Geschwindigkeit Schnell
			speed=200;
			modus=0;
		}
	return 0;
  }
}
SIGNAL (SIG_INTERRUPT0)
{	checkTasten=1;
}
SIGNAL(SIG_OVERFLOW0)
{
	if(checkTasten==1)
	{
		static int time; // Zählt die vergangene Zeit nach dem Tastendruck
		static unsigned char wert1=0; 	// wert1 ist nötig um das drücken Beider Tasten richtig zu erkennen 
		unsigned char wert;
		wert=i2c_readPorterw();
		wert1&=wert;
		if(wert1!=NONE)					// Wenn checkTasten zurecht gestetzt wurde beginnt die messung der Tastendruckdauer
		{ time++;
		}
		else if(wert==NONE && time)	// Da das Auslassen der Tasten keinen Einfluss auf wert1 hat wird wert überprüft
		{	
			if(time<SEC2)				
			{
				modus=wert1;			
			}
			else						// Wurde länger als 2 Sekunden gedrückt werden 3 andere Modis verwendet.
			{
				modus=wert1+3;			
			}
			checkTasten=0;
			time=0;
			wert1=0;
			
		}
			
	}
	driveEnable=1;
	
}

void i2c_startConfig(void)
{	
	unsigned char data1=0,data2=0;
	
	// Porterweiterungs Initialisierung
	
	data1=0x0F; 		// Configuration Register 
	data2=0x0B;		// xxxx1011
					// Interrupt Enabled,Global Intensity Off, Blink Flip On, Blink Enable
	i2c_setPorterw(data1,data2);
	
	
	data1=0x03;		// Input/Output Configuration Register
	data2=0x03;	// Port 1 und 2 Inputs
	i2c_setPorterw(data1,data2);
	
	
	// intensity //interrupt configured as interrupt -> goes low if change is detected
	
	data1=0x0E;		//Master and Global Intensity Register
	data2=0x10;		//PWM On ,Interrupt is not used as General Puropse Output 
	i2c_setPorterw(data1,data2);
	
	// intensity leds
	data1=0x12;		// P5,P4      //Blaue Leds.. Helligkeit Signalisiert Geschwindigkeit
	data2=0xEE;		// High Intensity
	i2c_setPorterw(data1,data2);
	data1=0x13;		// P6 und Tonausgabe		// Gelbe Led Reagiert auf Tastendruck
	data2=0x77;     // Tonausgabe Rechtecksignal
	i2c_setPorterw(data1,data2);
	data1=0x11;
	data2=0xFF;		// Widerstände statisch High
	i2c_setPorterw(data1,data2);
	
	// Blink Phasen  initialisierung
	
	data1=0x01;		// Blink Phase 1
	data2=0xBC;		// 1011 1100
					//
	i2c_setPorterw(data1,data2);
	
	data1=0x09;		// Blink Phase 2
	data2=0xCC;		// 1100 1100
	i2c_setPorterw(data1,data2);
	
	// ADC Initialisierung
	 //Setup Byte // AIN3/ REF = Ref output, SingleEnded, Clockstretching sampling activated
	 //Configuration Byte 
	i2c_start(I2C_ADC+I2C_WRITE);
	i2c_write(0xF2);
	i2c_write(0x05);
	i2c_stop();
	
}
void i2c_setPorterw(unsigned char chooseRegister, unsigned char wert)
{	
	unsigned char data=0;
	i2c_start(I2C_PORTERW+I2C_WRITE);
	data=chooseRegister;
	i2c_write(data);
	data=wert;
	i2c_write(data);
	i2c_stop();
}

void Drive ()
{
   int diff = 0;
   int l_speed = speed, r_speed = speed;
	MotorSpeed(l_speed,r_speed);
	MotorDir(FWD,FWD);
   
	 driveEnable=0;
    
     diff = encoder[LEFT] - encoder[RIGHT];
     if (diff > 0)
     { //Left faster than right
       if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10;
       else r_speed += 10;
     }
     if (diff < 0)
     { //Right faster than left
       if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10;
       else l_speed += 10;
     }
     EncoderSet(0,0); // reset encoder
     MotorSpeed(l_speed,r_speed);
	
   
   
 }
unsigned char i2c_readPorterw()
{	
	unsigned char data=0x00,wert=0;
	i2c_start(I2C_PORTERW+I2C_READ);
	i2c_write(data);
	wert=i2c_readNak();
	wert&=0x03;
	return wert;
}
wenn ja ist das ... verdammt schlecht....
ich habe bis jetzt nicht viel mehr als die tastenabfrage und die initialisierung programmiert ?!?