Ankündigung

Einklappen
Keine Ankündigung bisher.

Gesamt-Status-Variable vs. Einzel-Status

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Gesamt-Status-Variable vs. Einzel-Status

    Klingt zwar kompliziert - ist aber im Grund ganz einfach

    Ich möchte ca. 60 Statusvariablen (boolean) speichern (remanent) - dazu gibt es 2 Möglichkeiten:
    - entweder ich speicher jede Variable einzeln
    oder
    - ich erzeuge eine Status-Gesamtvariable von jeder Einzelstatus einen Bit zugeordnet ist, d.h. ich nehme eine 0u64 Variable

    Es stellt sich jetzt die Frage was "performanter" ist....

    das auslesen der einzelnen Bits aus der Gesamtvariable geht ja mit
    Status1=((1 and GesamtStatus)>0)); \\
    soweit ganz schmerzfrei, aber wie setze ich gezielt UND einfachein Bit?
    Ich kann natürlich mit
    if (1 and GesamtStatus)>0) then...
    abfragen und dann dazuzählen, aber gibt es dazu eventuell eine passende Bitoperation?

    Für jeden Tip dankbar....

    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    #2
    hmmm....
    man könnte doch einfach mit AND und XOR die einzelnen Bits setzen und löschen. Bits haben den Wert 2 hoch ihre Position.

    Also wenn Du Statusobjekt 23 auf EIN setzen willst, dann müsste das doch mit Gesamtstatus=Gesamtstatus and pow(2,23) funktionieren, oder?
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    Kommentar


      #3
      naja die Bit-shifterei habe ich (zugegebenermaßen) nicht kapiert....
      und wie setzte ich dann bewusst Bit 23 auf 0?
      EPIX
      ...und möge der Saft mit euch sein...
      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

      Kommentar


        #4
        danke, dass Du noch mal nachfragts. Das hat dazu geführt, dass ich beim Versuch ein Bespiel zu machen gemerkt habe, dass ich AND, OR, XOR und NOT durcheinander gewürfelt habe....

        Erst mal vorweg: Kommst du im Binären Zahlensystem grundsätzlich klar? Also 0100=4?

        machen wir es mal nur mit den 4 Bits, zu Beginn alles 0, also 0000.

        Bit 3 soll gesetzt werden, hat den Wert 4, zu ermitteln mit 2 hoch (3-1) => die "-1" hab ich auch unterschlagen.
        4=0100 um das zu setzen machst Du Gesamtstatus OR zu setzendes Bit, also Status= 0000 OR 0100 = 0100 (oder eben "Statusneu=Gesamtstatus OR 4")

        willst DU jetzt auch noch Bit 4 setzen: 4 hat wert 8 (2 hoch (4-1)), binär 1000
        also Gesamtstatus OR zu setzendes Bit, also Status=0100 OR 1000 = 1100 (oder eben "Statusneu=Gesamtstatus OR 8")

        Löschen geht mit zwei Schrtten. Erst das zu setzende Bit ermitteln, z. B. 3 = 0100 und das mit NOT invertieren = 1011
        Das jetzt mit dem Gesamtstatus "ANDen", also Status=1100 AND NOT 0100 = 1100 AND 1011 = 1000 => jetzt ist das dritte Bit 0! (oder eben "Statusneu=Gesamtstatus AND NOT 4")

        Halbwegs verstanden? Kannst den Windowstaschenrechner auf binär umschalten und da ein bischen spielen.
        ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

        Kommentar


          #5
          Zitat von EPIX Beitrag anzeigen
          naja die Bit-shifterei habe ich (zugegebenermaßen) nicht kapiert....
          und wie setzte ich dann bewusst Bit 23 auf 0?
          Setzen
          x= x or shift(1u24,23s08)
          Löschen
          x= x and !shift(1u24,23s08)
          wobei ich hier unterwegs bin und das nicht testen kann.
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #6
            danke für eure "Nachhilfe" - ich hab das binäre System natürlich gelernt - aber nie so richtig begriffen wie man die einzelnen Bits behandelt....
            addieren kann ich sogar noch, aber sonst....
            Ich glaube mit eurer Hilfe komm' ich weiter

            @enertegus: wie schaut es mit der Performance aus (Einzelstati vs Gesamtstatus)
            (weil sonst spare ich mir den "Zauber")
            EPIX
            ...und möge der Saft mit euch sein...
            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

            Kommentar


              #7
              den "shift" hatte ich nicht auf den Schirm! Der spart einen Schritt ein!

              Für Erich kurz zur Erklärung, falls nötig: Shift schiebt die Bits reihum um die Anzahl an Stellen aus dem zweiten Argument. mit shift(1,23) schiebst Du also alle Bits von "1" um 23 Stellen nach links. 1= 0001 und wie es dann 23 Stellen weiter links aussieht, kannst Du Dir selbst vorstellen. Die Zahl die dabei raus kommt ist das gleiche wie mein "2 hoch 23-1", nur halt eleganter. Dein erstes Argument bei shift muss also in Deinem Fall immer 1 sein.
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar


                #8
                @enertegus: wie schaut es mit der Performance aus (Einzelstati vs Gesamtstatus)
                Kann man dazu eine Auusage machen?
                EPIX
                ...und möge der Saft mit euch sein...
                Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                Kommentar


                  #9
                  Zitat von EPIX Beitrag anzeigen
                  Kann man dazu eine Auusage machen?
                  Das Speichern von 64 Variablen auf den Flash wird mehr benötigen als das bischen Logik. Kommt also darauf an, wieoft Du speicherst und lädst. An sich ist diese Operation aber sicher kein Killer.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    ich denke ca. 3 x am Tag...
                    (und wenn die shutdown-Funktion funktioniert, dann bei zusätzlich bei shutdowns)
                    das speichern und lesen der Variablen plane ich mit den Remanent-Makros von BMX umzusetzen


                    EPIX
                    ...und möge der Saft mit euch sein...
                    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                    Kommentar


                      #11
                      Wie lange warten wir nun schon auf die Shutdown -Funktion?

                      Kommentar


                        #12
                        Kommt in 3.1
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Zitat von enertegus Beitrag anzeigen
                          Kommt in 3.1
                          Hab' ich da einen Schaltfehler im Neuronennetz, oder sollte die 3.1 so Ende September 2015 schon rauskommen?

                          Kommentar


                            #14
                            Tja manches dauert eben länger als man hofft, aber meine Erfahrung ist dass es keinen Sinn macht, was halb fertiges raus zu geben. Alleine Der Umbau der TCP Kommunikation war riesig, auch wenn man am Ende als Anwender fast nichts davon mitbekommt. Das ist eben Produkt Pflege, die abseits aller Featurewünsche ohne große Werbetrommel auch gemacht werden muss.
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #15
                              Zitat von enertegus Beitrag anzeigen
                              Tja manches dauert eben länger als man hofft, aber meine Erfahrung ist dass es keinen Sinn macht, was halb fertiges raus zu geben. Alleine Der Umbau der TCP Kommunikation war riesig, auch wenn man am Ende als Anwender fast nichts davon mitbekommt. Das ist eben Produkt Pflege, die abseits aller Featurewünsche ohne große Werbetrommel auch gemacht werden muss.
                              Ich wollte Dir doch nur einen neuen Termin für den Release der 3.1 rauskitzeln.

                              Ist doch klar, dass Ihr einen Haufen Zeug nebenbei erledigen müsst.

                              Kommentar

                              Lädt...
                              X