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

Re: Evtl. Fehler im Modul eeprom.c2 Kategorie: I²C-Bus (von AndrĂ© H. - 14.07.2003 15:48)
Als Antwort auf Re: Evtl. Fehler im Modul eeprom.c2 von Rolf - 14.07.2003 12:54

Hallo Rolf,

> Hallo Andrè,
Jetzt merk ich's erst. :-)
Das hei�t André nicht Andrè !

> Mein Onkel verkauft auch als Fachhändler Solaranlagen... ich weis aber nicht mal, welche Steuerungen
> er verwendet. Irgend was fertiges....

Tja, ich handle nicht, sondern baue hauptsächlich Anlagen(, die ich natülich auch verkaufe *grins*).
In den meisten Anlagen reicht eine 0815-Regelung völlig.
Das gängiste und günstigste wird hier wohl TA (=Techische Alternative, �sterr. Firma) sein.

> Das Asm vorteile hat, ist klar. Es wäre nur nicht zweckmässig "schneller zu warten".
> Das hatte ich ja schon ausgefĂĽhrt. Sonst ist das mit dem asm-Code ja ok.

ASM lass ich vorerst einmal weg. Das wird etwas fĂĽr Version 3.0. :-)

>
> > > Ein sleep-wert von 1 reicht gerade um eine einzige
> > > int-Addition in einem Fremden Thread auszufĂĽhren. Das ist fĂĽr fremde Treads zu wenig und kostet
> > > nur enorme Treadwechselzeiten.
>
> Mir kommt da ein Verdacht... vieleicht kannst Du mich da auch aufklären...
> Wenn die VM "nur" abhängig vom "Runlevel" eine bestimte Menge an festgelegten Operationen ausführt,
> kann ich in Prinzip eine Int-addition garnicht mit einer long-addition vergleichen da immer beide Testschleifen
> gleich oft durchlaufen werden. Richtig?
Wieder einmal ein klares Jain. :-)
a=0.5 // FĂĽr was gibt es float *rofl*

Die Priorität besagt nichts anderes als die max. Anzahl der VM-OPs pro Durchlauf.
Dies ist also nicht zeitabhängig, sondern es wird einfach nur gezählt.
Standard-Prio ist 32. D.h. es werden 32 VM-OPs ausgeführt bevor die Rechenzeit dem nächstem
Thread abgegeben wird.
Die Maximale Prio ist 255, die minimale ist 1 (das ist aber keinem zu empfehlen *g*)
Die Prio 0 besagt, daĂ? der Thread steht.
Die Anweisung "halt" setzt die Prio lediglich auf 0.
Die Anweisung "reset" hingegen setzt den Thread zurĂĽck (incl. normales Capture-flag!).
Die Prio des zurĂĽckgesetzten Thread hat dann 0 oder 32.
(Threads mit dem Namen "main" haben zum Start immer Prio 32)

Wenn Du jetzt zwei Additionen mit int und long hast, benötigen beide
gleich viele VM-OPs:
int x;
long y;
x=x+4254;
y=y+4254;
Jede Zeile benötigt 4 VM-OPs
Werte auf den Stack laden: 2 VM-OPs
Addition und Ergenis auf den Stack laden : 1 VM-OP
Ergebnis in x bzw. y speichern: 1 VM-OP
Das einzige, was verschieden ist, ist die Ausführungszeit. Bei long wird etwas länger benötigt.
Um dies jedoch mit dem Systemtimer zu messen, muĂ? man diese Addition
z.b. 1000mal durchlaufen lassen und dann die vergangene Zeit durch 1000 teilen.
Nach diese Methode habe ich schon einige Anweisungen/Funktionen getestet,
wie lange diese wirklich brauchen.
Je genauer man den Wert haben will, desto öffters mu� man die Schleife durchlaufen lassen.
Aber vorsicht !!
Man mu� zuerst Messen, wie lange die Testschleife selbst benötigt und entsprechend
ein Offset abziehen:

Bsp:
timer=system.timer();
for i= 0 ... 999
{
 // ...
}
timer=system.timer()-timer;

Und um nochmal auf das sleep 1; zurĂĽckzukommen:
sleep 1 hei�t nicht, da� nur 1 ms gewartet wird. Es kann auch erheblich länger sein.
(z.B. 100 Threads mit Prio 255 (kommt nie vor):
Diese mĂĽssen zuerst durchlaufen werden, bevor hinter dem sleep weitergemacht wird. :-)
99*255 VM-Ops = 2525 VM-Ops. Da vergeht schon etwas Zeit. *g* )

> Das bedeutet aber, das mein Bfast im prinzip derzeit nicht zu gebrauchen ist weil letzlich nur die Gesamtzahl
> an Schleifen eine Aussage zur Leistung enthält. Die Angaben zu den einzelnen Schleifen ist eigentlich nur dann
> unterschiedlich, wenn die Schleifen unterschiedliche Mengen an VM-Operationen enthalten. Richtig?

Korrekt.

> Ich denke mal, wir werden da beide noch so die eine oder andere Ă?berraschung erleben den die VM
> des CC2 verhält sich offensichtlich nicht so, wie man es von einer CPU vermuten würde.
> Z.B. sind die Zeiten fĂĽr Int-additionen fast gleich wie bei Long-additionen... das wĂĽrde ich bei einer
> 16Bit-CPU so erst mal nicht vermuten.
Der Zeitunterschied zwischen int und long Operatiornen ist wahrlich sehr gering.
Floats benötigen jedoch deutlich mehr Rechenzeit.

> Das war ja im Prinzip auch meine Idee. Nur wollte ich es als c2-Code und sozusagen
> als Prototyp fĂĽr die Konvertierung nach asm umsetzen und erst in einem 2.ten Schritt
> und nach einer Testphase dann von Dir nach asm konvertieren lassen.

Die Konvertierung von C2 in ASM ist nicht gerade leicht.
Hier ist es fast immer besser glecih in ASM zu scheiben.
Gut, man kann den C2-Code benutzen, damit man einen "Ablaufplan" hat.

 
> Ja...
> if i2c.cstart(eepromaddr) break;
>         ^ da... wenn die Proportionalschrift mir da nicht den Satz zerbröselt...
Hier wird nichts "rebröselt". DafĂĽr werden automatisch   erstellt.
AuĂ?erdem, fĂĽr was habe ich eine Vorschau im Forum ? :-)
�brigens, nächste Frage: Mal sehen, ob Du es findest. *g*
Wo ist das Release beim neuem Capture ?  :-)

> Das wäre schön... wäre vor allem klasse, wenn das Teil als Aufforderung genommen wird, es
> zu erweitern... fĂĽr das wo ich es brauche, reicht mir das erst mal.. ich denke, das sich um
> die Möglichkeiten der VM eine Menge Gerüchte halten da kaum jemand wirklich die Abläufe
> versteht. Learning by doing... oder so...

Naja, wenn man erstmal anfängt in ASM zu programmieren, bekommt man so einiges mit.
Man mu� nämliuch zwangsläufig das Listing des Betriebsystem etwas studieren.

> function writeabyte(byte eepromaddr,int addr,byte data)
> {
>   capture i2c.flag;
> //evtl. HW-watchdog oder Timer starten....
>   wait i2c.start(160 or (eepromaddr shl 1));
>   i2c.write(addr shr 8);
>   i2c.write(addr);
>   i2c.write(data);
>   i2c.stop();
> //hier dann noch mal eine Lesefunktion ähnlicher Bauart und vergleich ob Daten identisch sind.
>   release;
> }
Hier gibt es jedoch ein kleines Problem:
Um da wieder rauszukommen hilft nur folgendes:
Entweder ein Neustart des Programms oder ein ZurĂĽcksetzen des betreffenden Threads
mit der Anweisung "reset" .
 
> Wäre das evtl. auch mit Deinen Asm-Funktionen zu regeln?
> Also   wait i2c.cstart(160 or (eepromaddr shl 1)); ?

Du meinst das I²C-Capture. Natürlich. cstart() (=Captured-Start) gibt genauso
wie start() das ACK zurĂĽck.

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:

Re: Evtl. Fehler im Modul eeprom.c2 (von Rolf - 15.07.2003 2:57)
    Re: Modul eeprom.c2 (von André H. - 15.07.2003 8:25)
        Re: Modul eeprom.c2 (von Rolf - 15.07.2003 10:47)
            Re: Modul eeprom.c2 (von 89984984/8 - 7.04.2005 10:32)
            Re: Modul eeprom.c2 (von André H. - 15.07.2003 11:50)
                Re: Modul eeprom.c2 (von Rolf - 15.07.2003 19:31)
                    Re: Modul eeprom.c2 (von André H. - 15.07.2003 20:26)
                       Re: Modul eeprom.c2 (von Rolf - 15.07.2003 22:48)
                          Re: Modul eeprom.c2 (von Rolf - 18.07.2003 0:43)
                             Re: Modul eeprom.c2 (von André H. - 18.07.2003 18:19)
                                Re: Modul eeprom.c2 (von Rolf - 18.07.2003 18:35)
                                   Re: Modul eeprom.c2 (von André H. - 18.07.2003 19:24)
                                     Re: Modul eeprom.c2 (von Rolf - 18.07.2003 21:38)
                                       Re: Modul eeprom.c2 (von Rolf - 18.07.2003 22:53)
                                         Re: Modul eeprom.c2 (von Rolf - 18.07.2003 22:55)
                                           Re: Modul eeprom.c2 (von Rolf - 19.07.2003 1:36)
                                             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)
                                       Re: Modul eeprom.c2 (von André H. - 18.07.2003 22:43)