Ankündigung

Einklappen
Keine Ankündigung bisher.

Boolesche Variable

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

    [Featurewunsch] Boolesche Variable

    Mich würde interessieren, wie Ihr die booleschen Variablen umgesetzt habt:

    • wirklich als Bits, um wie zu guten alten DOS-Zeiten acht Variablen auf ein Byte zu pressen?
    • oder handelt es sich wie üblich um jeweils ein Byte?


    Im zweiten Fall wäre es doch möglich, bei der Initialisierung zunächst einen "Unknown" Wert zu setzen, z.B. 0xFF. Zumindest über eine Wandlung nach u08 könnte man dort, wo es programmtechnisch Sinn macht, abfragen, ob ein Zustand noch unbekannt ist...

    Gerade bei Steuerungen ist es doch meist interessant, ob ein Zustand gesichert ist.

    #2
    Hier wäre mein Vorschlag bei allen Variablen ein entsprechendes Attribut zu generieren und auslesbar zu machen.

    Beispiel:
    Variable => Wert der Variable
    Variable.Attribut => aktuell/unbekannt

    if GA && !Variable && (Variable.Attribut==aktuell) then ...


    NB.:
    Bei GAs geht das ja über event() bzw. InitGA(), bei variablen wurde der event() aber entfernt (was auch nachvollziehbar ist).
    BR
    Marc

    Kommentar


      #3
      Das hätt' schon was...

      Als schreibfauler Mensch würd' ich dafür plädieren, einfach ein Sonderzeichen vor den Variablennamen, also an Deinem Beispiel orientiert:

      Beispiel:
      Variable => Wert der Variable
      ~Variable => EIN, wenn Wert zugewiesen wurde; AUS, wenn lediglich definiert


      if GA && !Variable && ~Variable then ...

      Kommentar


        #4
        Zitat von klaus_kraemer Beitrag anzeigen
        Im zweiten Fall wäre es doch möglich, bei der Initialisierung zunächst einen "Unknown" Wert zu setzen, z.B. 0xFF. .
        Eine boolsche Variable ist doch entweder EIN oder AUS. Ich versteh das so nicht. Das wäre dann er eine Art Enum-Typ oder eben eine u08 mit 0,1 und ungleich 0,1.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Nachdem "dummerweise" eine Variable im EibPC bei der Deklaration immer auch vorbelegt werden muss, gibt es leider keine Möglichkeit, festzustellen ob eine Variable inzwischen durch ein Ereignis gesetzt wurde - oder eben nur den vorbelegten Wert beinhaltet.

          Manchmal hat aber der Inhalt der Variablen nur "sinnvollen Inhalt", wenn sie durch ein Ereignis gesetzt worden ist - denn beim Programmieren muss man bei der Definition der b01 Variablen halt EIN oder AUS setzen. Dieser gesetzte Wert ist jedoch zunächst oft nutzlos...

          Wenn Du dann nicht weißt, was im Programmablauf zuerst eintritt - die Zuweisung eines EIN oder AUS - kann man nicht immer sinnvoll mit der Variablen arbeiten.

          Wenn ich's in Visual C# genau wissen will, dann pack' ich es halt in einen try - catch - Block und fange es ab, solange eine zwar deklarierte, jedoch noch nicht zugewiesene Variable angesprochen wird - oder ich frage auf "null" (im Sinne von ohne Inhalt) ab.

          Ich hätte gerne die Info: Wurde einer Variablen während des Programmablaufs schon ein Wert zugewiesen? Das beschreibt eigentlich das Kernproblem.

          Das betrifft praktisch alle Variablen, deren Vorbelegungswert einer der möglichen Zuweisungswerte im Programmablauf ist - z.B. muss ich eine u08 Variable auch immer irgendwie initialisieren - wenn nun der darauf abzubildende Wertebereich kleiner als [0..255] ist, dann prima - sonst aber?

          Ich hoffe, Du kannst den Gedankengang jetzt besser nachvollziehen...

          Kommentar


            #6
            Zitat von klaus_kraemer Beitrag anzeigen
            Das betrifft praktisch alle Variablen, deren Vorbelegungswert einer der möglichen Zuweisungswerte im Programmablauf ist - z.B. muss ich eine u08 Variable auch immer irgendwie initialisieren - wenn nun der darauf abzubildende Wertebereich kleiner als [0..255] ist, dann prima - sonst aber?
            Ich hoffe, Du kannst den Gedankengang jetzt besser nachvollziehen...
            Ok, dann hat das Problem aber nicht mit der Boolschen Variable an sich zu tun, sondern trifft quasi für jede Variable zu.
            Aus meiner Sicht, ist das schwierig zu realsieren. Es müsste sowohl der Compiler als auch die FW an kritischen Stellen umgebaut werden.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Zitat von enertegus Beitrag anzeigen
              Ok, dann hat das Problem aber nicht mit der Boolschen Variable an sich zu tun, sondern trifft quasi für jede Variable zu.
              Aus meiner Sicht, ist das schwierig zu realsieren. Es müsste sowohl der Compiler als auch die FW an kritischen Stellen umgebaut werden.
              Stimmt, bei der b01 ist das nur am prägnantesten.

              Ich sag auch nicht. dass es einfach wäre - aber schön!

              Vom Compilerbau habe ich eigentlich keine Ahnung, aber ich schätze mal, dass Variable erst auf eine Speicheradresse verweisen, wenn sie einen Wert zugewiesen bekommen - hier liegt vielleicht der Schlüssel.

              Kommentar


                #8
                Gedanke: Es würde vielleicht schon viel bringen, wenn die erste Zuweisung an eine Variable im Programmablauf ein change () auslösen würde. Nach der Logik, dass der beim Programmieren gesetzte Zwangswert eigentlich "wertlos" ist.

                Kommentar


                  #9
                  Zitat von klaus_kraemer Beitrag anzeigen
                  Gedanke: Es würde vielleicht schon viel bringen, wenn die erste Zuweisung an eine Variable im Programmablauf ein change () auslösen würde.

                  Das würde Dein Problem zwar elegant lösen, dafür an anderer Stelle neue Probleme hervorrufen!
                  ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                  Kommentar


                    #10
                    Zitat von Uwe! Beitrag anzeigen

                    Das würde Dein Problem zwar elegant lösen, dafür an anderer Stelle neue Probleme hervorrufen!
                    Hm, das würde doch in die gleiche Richtung gehen, wie jetzt auch schon InitGA für GAs, oder? Nur, dass das noch eine Ebene komplexer wird ...

                    Generell kann man sich das für Boolean ja auch basteln -> u08 und init auf 255 und dann bei der ersten Zuweisung ....

                    Dann darf man aber nur noch auf konkrete Werte prüfen.
                    BR
                    Marc

                    Kommentar

                    Lädt...
                    X