新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARMCC對匿名結構和聯合的支持

        ARMCC對匿名結構和聯合的支持

        作者: 時間:2016-12-01 來源:網絡 收藏
        一 對匿名結構和聯合的支持

        ARMCC
        4.6.1. #pragma anon_unions, #pragma no_anon_unions
        這些編譯指示啟用和禁用對匿名結構和聯合的支持。

        本文引用地址:http://www.104case.com/article/201612/324558.htm

        二 對齊


        可以在需要進行取消對齊的結構前用
        #pargma pack(1)
        以該結構后用
        #pargma pack()
        即可。

        可以同時包括多個結構,也可以整個文件都包涵進去。
        gcc會自動尋找該定義,并取消默認的對齊方式。這種方法還是比較好的,比在gcc參數中加選項要好,可以不影響系統的庫方式 

        如下:
        struct
        {
        char a;
        int b;
        }aa;

        用sizeof(aa)值為8,而不是5(32位環境下)。
        這是不是由于GCC的對齊機制引起的?如何disable掉

        1.
        struct irq_routing_options {
        u16 size;
        struct irq_info *table;
        u16 segment;
        } __attribute__((packed));

        2.
        #pragma pack(1)
        struct ... {
        ...
        }...;
        #pragma pack()
           

        在MS-VC中的規則,
        pack(1) 表示一字節對齊。

        bx_bird提到的是在Gcc中的規則,也表示單字節對齊。

        例如使用
        struct my_s
        {
        char a;
        int b;
        }__attribute__((packed));
        struct my_s aa;
        就可以使aa變量只占用5個字節而不是8個字節。

        uint8_t
        __attribute((aligned (4)))

        三 宏定義鏈接符

        #define A(a) TEST_##a

        #define A(b) == TEST_b
        #define A(1) == TEST_1



        關鍵詞: ARMCC匿名結

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 庆元县| 黎平县| 通化市| 江陵县| 江川县| 修水县| 青神县| 和龙市| 迭部县| 白玉县| 重庆市| 安化县| 纳雍县| 临安市| 福州市| 边坝县| 洛浦县| 长汀县| 平陆县| 河间市| 临城县| 塘沽区| 福贡县| 利津县| 闽清县| 通道| 藁城市| 阳新县| 漠河县| 昌江| 繁昌县| 丰宁| 赤壁市| 秀山| 舞阳县| 普兰县| 库车县| 正镶白旗| 济源市| 保康县| 施甸县|