Re: Danke, habe aber noch EEPROM Probleme Kategorie: Sonstige Hardware (von André H. - 27.04.2003 20:32) | |
Als Antwort auf Re: Danke, habe aber noch EEPROM Probleme von Roman - 26.04.2003 17:08
| |
Hallo Roman, > ich habe drei (byte,int,long) Hilfsfunktionen geschrieben, die das Addieren von > werten ermöglichen, aber gerade die int funktioniert nicht: > > function addint (int addr, int data) { >  int value; >  value = readint(addr)* data; >  if (value < (0x8000)) { >    writeint(addr, value); >  } else { >    writeint(addr, 0x8000); >  } > } Die IF-Abfrage kann nicht funzen, da 0x8000 als -32768 gelesen wird. Es gibt jedoch keine kleinere Integerzahl als -32768. Ich nehme an, da� Du so einen �berlauf abfangen willst und nur pos. Werte zulassen willst, und im Fehlerfall -32768 ins EEProm geschrieben werden soll. Die Abfrage kannst Du dann auf zwei Weisen durchführen: 1. logisch: if value and 0x8000 // Wenn Integerwert negativ 2. Vergleich if value < 0 // Wenn Integerwert negativ > Ich habe bemerkt, dass der lesevorgang auch abgebrochen > werden kann, falls das eeprom nicht antwortet: > ... >  loop >  { >  if i2c.start(eepromaddr) break; >  if i>=100 return 0; >  i=i+1; >  sleep 1; >  } > ... > > kann man das abstellen, oder ist das gerade der Fehler!? > Bei meinem Programm greifen regelmä�ig mehrere Threads > auf das eeprom zu. Nein, das darf man nicht "abstellen", da sonst das Programm an diese Stelle stehen bleiben kann. Diese Schleife ist notwendig, da das EEProm eine gewisse Zeit benötigt, um Daten zu schreiben und in dieser Zeit nicht reagiert. Dies kann einige ms dauern. Wenn das EEProm nach 100 Durchläufen nicht mehr reagiert, kann es nur defekt oder nicht angeschlossen sein. Auch, wenn mehrere Threads auf das EEProm zugreifen, darf es durch das Capture keine Probleme geben. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Vielen Dank! (von Roman - 28.04.2003 8:38) |