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
wenn ja ist das ... verdammt schlecht....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; }
ich habe bis jetzt nicht viel mehr als die tastenabfrage und die initialisierung programmiert ?!?







Zitieren

Lesezeichen