<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        共用體union的妙用

        作者:公平   來源:本站原創   點擊數:  更新時間:2014年03月14日   【字體:
        結構體struct是一個常用的數據類型,主要是將各種類型的數據打包成一個新的數據類型,在驅動開發,寄存器的定義等方面都有比較大的優勢。在使用的過程中需要注意空結構體的大小以及對齊(8字節)對數據大小的影響。具體的應用就不說了。另一個與struct非常相近的數據類型union則相對運用的較少,但是如果理解了union的本質就會發現該數據類型的好處。
        union主要是將各種類型的數據存放在一段固定的存儲器中,存儲器的大小由union中需要最大存儲器的數據類型決定。比如:
        union student
        {
            char ***;
            int age;
            long number;
            double score;
        };
        其中long、double需要16個字節,而char 只需要1個字節,因此該共用體占用16個字節。union的關鍵是不同的數據類型共用存儲器。

        主要的運用:
        1、確定CPU的模式:大端、小端模式確定
        大小端不同,則存儲的方式也存在差別,比如int需要4個字節,而char只需要1個字節,根據1個字節所在的具體位置即可判定CPU的模式
        union TestCPU
        {
             int i;
             char ch;
        };
        void testCPUMode(void)
        {
            union TestCPU Test;
            Test.i = 1;
            if(Test.ch == 1)
            {
              //這個CPU是小端模式
            }
            else
            {
               //這種情況下就是大端模式
            }
        }

        2、實現不同數據之間的類型轉換
        union Type
        {
           int i;
           char ch;
           long lint;
           ....
        };

        ...
        union Type type;
        這樣各種類型的數據共用存儲空間,很方便的實現了不同數據類型之間的轉換,不需要顯示的強制類型轉換。

        union相比struct更加的節省空間。

        3、寄存器的定義,實現整體的訪問和單項的訪問。
        struct register
        {char a;
        char b;
        char c;
        char d;
        };

        union Register
        {
           struct register;
           int whole;
        };
        這樣就能實現單項和整體的訪問,特別是引入位域操作等相關結構以后,能夠實現每一個bit的訪問。
        其他的優勢需要總結,我暫時寫這三點了。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮