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

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)