Hallo Forum,
ich muss schon sagen *leider* habe ich wieder ein nerviges Problem, und somit *leider* wieder eine kniffelige Frage für euch

Kurzes Intro:
ATMega32
avr-gcc (GCC) 4.1.2 (WinAVR 20070525)

Okay, was nun passiert ist:
ich habe eine Globale Variable des Typs uint8_t Data.TRX_Indexer.

Zum Start des Programms lasse ich mein Board initialisieren. Dort wird auch der UART initialisiert. Dazu benutze ich die Funktionen von P. Fleury:
Code:
void avrboard_init(){
   ...
   Data.TRX_Indexer = 0;
   ...
   uart_init( UART_BAUD_SELECT_DOUBLE_SPEED(UART_BAUD_RATE,F_CPU) );
   ... jede Menge anderes Gelump...
}
Danach wird der UART sozusagen von mir freigeschaltet.
Code:
void rs232_open() {
	//alle unwichtigen interrupts beenden
	led_busy_on();
	RS232.Open=1; 
	Menue.Hold=1;
	lcd_clr_scrollbar();
	keypad_close();
	lcd_clrscr();
	lcd_puts("RS232: Verbinden");
	rs232_puts("CON;ping?");
	RS232.rtys=0;
	RS232.Timeout=0;
	return;
        // ab jetzt eingehende Signale interpretieren
}
Wenn der Aufruf von rs232_open() fertig ist prüfe ich den Wert meiner Data.TRX_Indexer-Variablen in der Main.
Code:
int main(void)
{ 
	avrboard_init();
	rs232_open();

        // TESTBLOCK START
	lcd_clrscr();
	lcd_puts("PC Autodetect");
	lcd_gotoxy(0,1);
	lcd_puts("RS232<->PC"); //10 chars
	char puffer[33];
	itoa(Data.TRX_Indexer, puffer, 10);
	lcd_clrscr();
	lcd_puts(puffer);
	led_error_on(); for(;;);
       //TESTBLOCK ENDE
        
       ... all das darunter wird nicht mehr ausgeführt
}
Und siehe da, obwohl ich die Variable mit 0 initialisiert habe (in der avrboard_init()) , hat sie auf einmal den Wert 7! Wieso 7?

Wenn ich den Quelltext innerhalb von TESTBLOCK START und TESTBLOCK ENDE an das Ende der Funktion rs232_open() setze, erhalte ich in der Data.TRX_Indexer den Wert 0, wie ich es auch erwarte.
Code:
void rs232_open() {
	//alle unwichtigen interrupts beenden
	led_busy_on();
	RS232.Open=1;
	Menue.Hold=1;
	lcd_clr_scrollbar();
	keypad_close();
	lcd_clrscr();
	lcd_puts("RS232: Verbinden");
	rs232_puts("CON;ping?");
	RS232.rtys=0;
	RS232.Timeout=0;
        // TESTBLOCK START
	lcd_clrscr();
	lcd_puts("PC Autodetect");
	lcd_gotoxy(0,1);
	lcd_puts("RS232<->PC"); //10 chars
	char puffer[33];
	itoa(Data.TRX_Indexer, puffer, 10);
	lcd_clrscr();
	lcd_puts(puffer);
	led_error_on(); for(;;);
       //TESTBLOCK ENDE
 
       return;
}
Kann mir das jemand erklären, warum mir die Data.TRX_Indexer nach dem Aufruf von rs232_open() mit 7 überschrieben wird, nicht aber innerhalb der Funtkion?

Ihr werdet euch sicher fragen, wieso im Testbereich diese sache mit dem PC-Autodetect etc. steht. Tja, mir ist aufgefallen, wenn ich in der 2. Zeile des Displays nur ein Zeichen weniger anzeigen lasse (z.B. lcd_puts("RS232<->P");//9 chars), dann erhalte ich auch den Wert 0 in meiner Data.TRX_Indexer. Mein Display hat aber 2*16 Zeichen, das umfasst es eigentlich locker.

Bin auf eure Ideen gespannt, ich habe nämlich absolut keinen Schimmer mehr, wie ich weiter machen soll...

Viele Grüße und gute Nacht,
Simon