Re: Modul eeprom.c2 Kategorie: I²C-Bus (von Rolf - 19.07.2003 1:36) | |
Als Antwort auf Re: Modul eeprom.c2 von Rolf - 18.07.2003 22:55
| |
Hallo Andrè, erst mal mu� ich Dir sagen, SORRY. Ich habe Dich vieleicht doch falsch eingeschätzt.. Du machst es einem aber auch nicht leicht. Gleiches darfst Du aber auch von mir behaupten :-) Das Bfast scheint sich auch bei Dir zu bewähren... :-) Freut mich natürlich auch :-))) Zur Version 2.4b : Super! Da mu� ich wirklich mein Hut vor Dir ziehen. Was mir beim kurzen durchlesen aufgefallen ist, Du benutzt read() teilweise mit Fehlerprüfung, Teilweise ohne. Hat das nen Grund? Ich meine ausser das das Modul nochnicht fertig ist? Einmal so: if read(eepromaddr,addr) und einmal die neue Version: if not read(eepromaddr,addr){lasterr=0x000200000000;return 0;} Bei den Longarrays verarbeitest Du die Longs in zwei Schritten als geteilte INTs mit shl 16 Lässt sich das nicht ... anders... bzw. kürzer regeln? Oder gibt das Probleme wegen 16 Bit bei shl... ? ich weis es jetzt nicht genau... Ansonsten hast Du scheinbar alle Macken beseitigt, die noch so gefunden hatte. in writeintarray den Pagebreak hast Du gefixt.. der //kommentar kann da jetzt raus... von wegen gerade Adressen... das ist erledigt :-) Wenn ich noch was für die Wunschliste äussern darf, wäre eine Stringarray-Funktion nicht schlecht. Dann sind bis auf Float alle Datentypen drin. Aber wie gesagt.... Wunschliste... das Longarray war wichtiger. Noch ne Idee... ich gebe zu, ich kann sie erst morgen prüfen... aber ich meine, sowas gesehen zu haben. Meine "Zielvorstellung" eines Programmes mit eeprom-Funktion (ins Unreine geschrieben) ist etwa so: ee1=0 addr=16384 If writebyte(ee1,addr,wert) doerror (geterr()) If writebyte(ee1,addr,wert) doerror (geterr()) If writelong(ee1,addr,wert) doerror (geterr()) If writestring(ee1,addr,wert) doerror (geterr()) If writebyte(ee1,addr,wert) doerror (geterr()) .... addr=16384 If readbyte(ee1,addr,wert) doerror (geterr()) If readbyte(ee1,addr,wert) doerror (geterr()) If readlong(ee1,addr,wert) doerror (geterr()) If readstring(ee1,addr,wert) doerror (geterr()) If readbyte(ee1,addr,wert) doerror (geterr()) Auffallen solte bei dem Beispiel vor allem, das keine Adressen gezählt werden. Die doerror wäre eine vom Programmierer zugenerierende Fehlerfunktion in der er bestimmt, was im Fehlerfall geschehen soll. Mir ist dazu (so meine ich wenigstens) letztens aufgefallen, das wenn man in einer Funktion ein Funkionsparameter überschreibt, der nach oben weiter gereicht wird, unabhängig vom returnwert. Also so etwa: //programmstart a=0 test() //a ist jetzt 100 obwohl die Funktion nichts zurück gibt. funktion test (int a) { a=100 } Wenn das so stimmt - und ich vermute das es so stimmt sonst könntest Du z.B. eigentlich keine Strings in readstr zurück geben - dann müste für mein Beispiel oben der Parameter epromaddr nicht verändert werden und in addr müste die Menge der geschriebenen/gelesenen Bytes plus aktuelle Adresse eingetragen werden. Wenn das so stimmt - wie gesagt... ich kann es erst morgen nachmittag ausprobieren. Wenn das ginge, hätte man im Fehlerfall auch die aktuelle Schreibposition, es müste jedoch für die Fehlerauswertung für jeden Schreibvorgang aber auch die Adresse mitgezählt werden. Verzichtet man auf addr als Fehlerlokalisierung und schreibt am schlu� einfach nur z.B. bei writestr addr=addr+32 ginge das schneller. Hat also Vor- und Nachteile. Ggf müstest Du auch neue Variablen in den Funktionen bauen da Du die Parameter teilweise als Returnwert verwendest. Der Vorteil dieser Idee ist vor allem, das man sich als Programmierer nicht mehr überlegen mu�, wie lang den nun die Typen beim Schreiben sind, da am Schlu� jeweils sozusagen schon die neue Startposition für das nächste Schreiben übergeben würde. Ich werde mich morgen mal hinsetzen und ein Programm schreiben, was für die Verschieden Var-Typen ein Schreiblesetest auf einem 24c512 macht. So wie man das von den älteren Speichertests kennt. Ich hoffe, mein eeprom geht mir dabei nicht flöten. So... noch zwei Kleinigkeiten... ich melde mich morgen nachmittag 19.7. ... hoffentlich dann schon mit dem Testporgramm. Den einen Thread wo ich so unsachlich gewesen bin, versuche ich noch gerade zu ziehen. Und noch was... Danke für die Arbeit. Es lohnt sich! Gru� Rolf | |
Antwort schreiben Antworten: Re: Modul eeprom.c2 (von André H. - 19.07.2003 8:41) Re: Modul eeprom.c2 (von Rolf - 19.07.2003 13:02) Re: Modul eeprom.c2 (von André H. - 22.07.2003 10:18) Re: Modul eeprom.c2 (von Rolf - 22.07.2003 14:04) Re: Modul eeprom.c2 (von André H. - 22.07.2003 14:42) Re: Modul eeprom.c2 (von Rolf - 19.07.2003 16:39) Re: Modul eeprom.c2 (von André H. - 22.07.2003 10:24) Re: Modul eeprom.c2 (von Rolf - 22.07.2003 11:26) Re: Modul eeprom.c2 (von André H. - 22.07.2003 14:13) Re: Modul eeprom.c2 (von Rolf - 22.07.2003 15:04) Re: Modul eeprom.c2 (von André H. - 23.07.2003 16:42) Re: Modul eeprom.c2 (von Rolf - 23.07.2003 21:28) Re: Modul eeprom.c2 (von Rolf - 23.07.2003 12:16) Re: Modul eeprom.c2 (von André H. - 23.07.2003 16:28) |