tobimc
28.04.2007, 17:23
Hi,
folgendes Problem...
Ich möchte mein 24C128 EEPROM auslesen, und zu dem zweck muss ich logischerweise eine FOR-Schleife 16000 mal durchlaufen.
void read_eeprom(void){
volatile uint16_t address = 0;
uint8_t data[3];
uint8_t zero = 10;
//uint8_t wait = 0;
//zero = 0;
for(address = 0 ; address < 16000 ; address++){
data[0] = (address & (11111111 << 8)) >> 8;
data[1] = (address & 0xFF);
data[2] = 0;
uartsendchar(data[0]);
uartsendchar(data[1]);
zero = 10;
/*Kommentare*/
}
uartsendchar(68);
uartsendchar(111);
uartsendchar(110);
uartsendchar(101);
uartsendchar(33);
}
Da die Funktion nie funktionierte hab ich mir mal erlaubt, den funktionellen Code auszukommentieren, und mir nur die generierten Adressen anzusehen.
Die 16-Bit Variable address wird in 2 Bytes aufgespalten (high [data[0]], low [data[1]]). Diese werden dann via uartsendchar(); über UART ausgegeben.
Das funktioniert ganz klasse ... bis address = 2047 (7 , 255) dann springt meine generierte Addresse an 0 (0, 0). Das lustige ist aber, dass die Schleife exakt 16000 mal durchlaufen wird.
Frage: Woran liegts?
(Ich verwende -Os)
Ich danke euch für die Hilfe, ich hab nämlich z.Zt. schlicht keinen Plan mehr, an was es liegen könnte.
VLG Tobi
folgendes Problem...
Ich möchte mein 24C128 EEPROM auslesen, und zu dem zweck muss ich logischerweise eine FOR-Schleife 16000 mal durchlaufen.
void read_eeprom(void){
volatile uint16_t address = 0;
uint8_t data[3];
uint8_t zero = 10;
//uint8_t wait = 0;
//zero = 0;
for(address = 0 ; address < 16000 ; address++){
data[0] = (address & (11111111 << 8)) >> 8;
data[1] = (address & 0xFF);
data[2] = 0;
uartsendchar(data[0]);
uartsendchar(data[1]);
zero = 10;
/*Kommentare*/
}
uartsendchar(68);
uartsendchar(111);
uartsendchar(110);
uartsendchar(101);
uartsendchar(33);
}
Da die Funktion nie funktionierte hab ich mir mal erlaubt, den funktionellen Code auszukommentieren, und mir nur die generierten Adressen anzusehen.
Die 16-Bit Variable address wird in 2 Bytes aufgespalten (high [data[0]], low [data[1]]). Diese werden dann via uartsendchar(); über UART ausgegeben.
Das funktioniert ganz klasse ... bis address = 2047 (7 , 255) dann springt meine generierte Addresse an 0 (0, 0). Das lustige ist aber, dass die Schleife exakt 16000 mal durchlaufen wird.
Frage: Woran liegts?
(Ich verwende -Os)
Ich danke euch für die Hilfe, ich hab nämlich z.Zt. schlicht keinen Plan mehr, an was es liegen könnte.
VLG Tobi