Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Internes EEPROM Kategorie: Verschiedenes (von Joerg - 16.04.2010 11:29)
Ich nutze:
C-Control Pro Mega128
Hallo,

ich habe mit einem Testprogramm die Zugriffzeiten auf das interne EEPROM gemessen.
Dabei ist mir aufgefallen, das ich bei einem wechseln der Daten eine um den
Faktor 100 erhöhte Zugriffzeit habe.

Sind z.B. in dem EEPROM bereits Nullen und ich schreibe erneut Nullen herein,
dann benötige ich ca. 330ms für 4000 Werte.
Bei einem Wechsel von 0x00 auf 0xFF oder von 0xFF auf  0x00 benötige ich hingegen ca. 33000ms.


Lässt sich diese hohe Differenz erklären?
Oder liest der Treiber die Daten vorher aus und schreibt nur bei einer Veränderung neu?

Grü�e Jörg


#define LF        0x0A
#define CR        0x0D
#define SPACE     0x20



/*
AusfĂĽhrungszeiten
Time 32 * 10ms
Time 33 * 10ms
Time 3338 * 10ms
Time 33 * 10ms
Time 3339 * 10ms
Time 3339 * 10ms
Time 34 * 10ms
Time 33 * 10ms
*/



void main(void)
{
  word counter;
  word pos;
  word time;





  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);



  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0xFF);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0xFF);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0x0F);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);


  Timer_TickCount();
  for(pos  = 2; pos <= 4000; pos++)
  {
    EEPROM_Write(pos,0);
  }
  time=Timer_TickCount();
  Msg_WriteText("Time ");
  Msg_WriteWord(time);
  Msg_WriteChar(CR);



  while(true)
  {
  }
}




    Antwort schreiben


Antworten:

Re: Internes EEPROM (von PeterS - 18.04.2010 13:14)
    Re: Internes EEPROM (von Joerg - 19.04.2010 8:48)