Heftiger Fehler im Modul eeprom Kategorie: Sonstige Hardware (von Udo - 22.02.2009 15:18) | ||
| ||
Hallo, im Modul eeprom befindet sich ein ziemlich heftiger Fehler. Mich wundert eigentlich, dass er noch nicht aufgefallen ist, da er den Umgang mit Longarrays praktisch unbenutzbar macht. Konkret enthält das Modul eeprom folgende Funktion: /*************************************/ /* Long-Array schreiben */ /*************************************/ function writelongarray(byte eepromaddr,int addr, long data[], int len) returns int // Für "addr" sollten nur geradzahlige Werte übergeben werden !! {int i;byte j; <---- j ist unnötig if len < 1 return 0; if write(eepromaddr,addr) { for i=0 ... len*4-1 { if ((addr+i) % Pagewrite)==0 and i {i2c.stop(); if not write(eepromaddr,addr+i) {lasterr=0xB0000 or (i/4);return 0;} } i2c.write((data[i]) shr (8*(3-i%4))); <---- hier ist der Fehler } i2c.stop(); return -1; } lasterr=0xB0000; return 0; } In der von mir markierten Zeile wird data[i] verwendet. i läuft in dieser Funktion aber von 0 bis len*4-1, dabei ist i jedoch nur bis len definiert und nicht bis 4*len-1. Die restlichen Werte sind undefiniert und zufällig. Weiterhin wird von jedem Long-Wert, der eigentlich aus 4 Bytes besteht nur eines geschrieben. Die markierte Zeile sollte daher durch folgende ersetzt werden: i2c.write((data[i/4]) shr (8*(3-i%4))); Weiterhin ist j als byte definiert, ohne benötigt zu werden, was aber nicht schlimm ist. Viele Grü�e Udo | ||
Antwort schreiben Antworten: Re: Heftiger Fehler im Modul eeprom (von André H. - 13.04.2009 16:39) |