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 16:39)
Als Antwort auf Re: Modul eeprom.c2 von Rolf - 19.07.2003 13:02

Hallo Andrè,
> > > 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:
>
> Ich weis nicht, wie ich auf das schmale Brett gekommen bin.... :-)
> Die funktionen sind tatsächlich gekapselt und "Wasserdicht"... Die Ausnutzung des Seiteneffekts
> wie früher unter C möglich und üblich geht nicht, weil eine Kopie des Wertes auf den Funktionsstack
> geschrieben wird und nicht der Wert selbst oder dessen Adresse.. ich dachte ich hätte sowas gesehen
> aber nach dem ich es mit einem kleinen Test ausprobiert habe, ist die Idee hinfällig.. zumindest was die
> "Autoaddressierung" angeht.

Mir ist ein Licht aufgegangen... es wurde richtig hell :-)
Das mit dem Seiteneffekt ist doch möglich.. und ich habe es tatsächlich gesehen gehabt... allerdings mit
einem String und nicht mit einem Int wie ich es heute morgen ausprobierte. Hab doch keine Halluzi's....
Ich habe auch die Stelle im CC2-Handbuch gefunden, die den Zusammenhang noch mal genau klärt.
S.68 Parameter und lokale Variablen

So.. und jetzt kommt der Clou... definiert man fĂĽr eeepromaddr und addr je einen eigenen Typ einer Variable
vom Typ INT, werden die Parameter nicht mehr als Stackwert sondern referenziert angesprochen.
Ausserdem lassen sich die beiden static Variablen in einem Typ zusammen fassen was weniger
Stackoperationen zur Folge hat.
Variante 1:

type eeadress
{ byte eepromaddr;}

type myaddr
{ int addr;}

Dann klappt auch
eeadress=0
myaddr=16384
If writebyte(eeadress,myaddr,wert) doerror (geterr())
If writebyte(eeadress,myaddr,wert) doerror (geterr())
If writelong(eeadress,myaddr,wert) doerror (geterr())
....

Variante 2:

type eeadress
{
   byte eepromaddr;
   int addr;
}

Dann klappt auch
eeadress.eepromaddr=0;
eeadress.myaddr=16384;

If writebyte(eeadress,wert) doerror (geterr())
If writebyte(eeadress,wert) doerror (geterr())
If writelong(eeadress,wert) doerror (geterr())
....
mit automatischem hochzählen der Adressen. Variante 2 finde ich sogar noch eleganter weil wie gesagt
min. 1 Stackvariable entfällt (die Adresse für die Referenz zum neuen Typ mu� ja immer übergeben werden.
Referenzen mĂĽsten aber weit schneller als Stackoperationen sein. Da winkt also auch ein Vorteil.

> > So einfach machen wir es den Leuten nicht. :-)

Mit der Idee kannst Du den Leuten ruhig etwas mehr Luxus gönnen... :-)
Trau Dich ! :-)
Die Angaben sind ja weiterhin jederzeit auch mit direkten Adressen zu machen und es wĂĽrde sich eine
weitere Möglichkeit zur Prüfung von unvollständig geschriebenen Daten eröffnen.

> > Man mu� hier selbst mitzählen. Au�erdem hätte dies nur Vorteile beim sequentiellen
> > Schreiben. (z.B. Datenlogger)
Wie gesagt..es ist nicht vorherzusehen, wo fĂĽr die CC2 eingesetzt wird... und sei es "nur" als
Datenlogger... ĂĽberleg mal... will ich ein Menue darstellen, das Texte auf ein LCD ausgibt,
muĂ? ich die Texte sequentiell einlesen. Jede Stunde ein MeĂ?wert schreiben... sequentiell...
Suchen in einem Datenfeld... sequentiell lesen und vergleichen... dieses "nur" bei Dir ist aus
meiner Sicht so nicht ok.

Die Nachteile der Geschichte sind 2 zusätzliche statische Variablen für das eeprom und die Adresse.
Da Du aber schon eine eingefĂĽhrt hast, macht mir das wenig bedeneken solange wir da nich mit aasen.

Ok.. ich warte weiter auf Dein nächstes Posting... (und ggf. Mail mit �nderungen)
Beachte bitte mein letztes und dieses Posting im Zusammenhang.

GruĂ? Rolf




    Antwort schreiben


Antworten:

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)