Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Heftiger Fehler im Modul eeprom Kategorie: Sonstige Hardware (von Udo - 22.02.2009 15:18)
Ich nutze:
C164CI-ControllerBoard, eigenes Board, OSOPT V3.0
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)