Adreßoperator



  • CStoll schrieb:

    (und auf diese Weise erreicht man über die entsprechenden Verrenkungen ein Verhalten, das man durchaus als "call by reference" ansehen könnte)

    wieso verrenkung, das ist doch standard vorgehen in c.
    oder etwa nicht 😉



  • Und während Timmy- Bob darüber nachdenkt, wie man die Welt von Macros befreien könnte :p , hat Supertimmy die ultimative Funktion gefunden, wie man die Welt von der Ausstrahlung der "Waltons" befreien kann.
    Juhuuuu! 😃



  • Mal was anderes. Warum funktioniert das hier eigentlich :

    struct bit_def {
            char    b0:1;
            char    b1:1;
            char    b2:1;
            char    b3:1;
            char    b4:1;
            char    b5:1;
            char    b6:1;
            char    b7:1;
    };
    

    Was wird den hier gemacht und warum darf man da ein ":" in die Variablendeklaration schreiben ?
    Wenn ich

    char a:1;
    

    schreibe erlaubt der Compiler mir das ja auch nicht.

    Kann mir einer erklären warum 1. das hier geht, 2.was da eigentlich passiert ( also nur bei dem struct und den Variablen).



  • Das nennt sich "Bitfeld" und teilt einen (in diesem Fall) char in einzelne Bits auf, die du getrennt ansprechen kannst. Intern wird der Zugriff wohl wieder auf & und | mit geeigneten Masken umgerechnet.

    (und ja, das geht nur für struct-Elemente - und nur für ganzzahlige Build-in Typen ("mystruct v:1;" oder "double v:1;" ist nicht erlaubt))



  • CStoll schrieb:

    ... die du getrennt ansprechen kannst.

    jo.
    Bitfeld: 11111101

    Guten morgen Bit0 siehst gut aus heute, du hast eine positive Ausstrahlung.
    Guten morgen Bit1, was ist denn mit dir los, du machst so einen negativen.
    Guten morgen Bit2, usw.
    🙂



  • Aha ok cool, muss ich mal mit rumspielen. thx für die Infos



  • CStoll schrieb:

    Das nennt sich "Bitfeld" ... Intern wird der Zugriff wohl wieder auf & und | mit geeigneten Masken umgerechnet.

    Da muß ich widersprechen, eigentlich lösen alle besseren Embedded- Compiler solche Konstrukte in effektive Bit- Maschinenbefehle auf. 🙂



  • übrigens muss nicht immer eine 1 hinter dem doppelpunkt sein, auch grössere werte sind erlaubt (maximal bis zur anzahl bits des basistyps). bitfields sind eine art kompressionstechnik um mehrere kleine variablen zusammenzufassen und damit speicher zu sparen. bitfields sind weder dazu geeignet, noch wurden sie dazu erfunden, auf einzelne bits einer variablen zuzugreifen.
    🙂



  • also lediglich dafür gedacht um Speicherplatz zu sparen ? Is ja langweilig 😞



  • bitfield-freak schrieb:

    bitfields sind weder dazu geeignet, noch wurden sie dazu erfunden, auf einzelne bits einer variablen zuzugreifen. 🙂

    Mag sein, daß es nicht so gedacht und/oder spezifiziert ist, in der Praxis ist es aber so implementiert, wie ich das kenne. Wie anders sollte man einen µC so programmieren, der via SFR- Bits so einzelne Funktionen bitweise an- und abschaltet?


Anmelden zum Antworten