新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARMCC對(duì)匿名結(jié)構(gòu)和聯(lián)合的支持

ARMCC對(duì)匿名結(jié)構(gòu)和聯(lián)合的支持

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
一 對(duì)匿名結(jié)構(gòu)和聯(lián)合的支持

ARMCC
4.6.1. #pragma anon_unions, #pragma no_anon_unions
這些編譯指示啟用和禁用對(duì)匿名結(jié)構(gòu)和聯(lián)合的支持。

本文引用地址:http://m.butianyuan.cn/article/201612/324558.htm

二 對(duì)齊


可以在需要進(jìn)行取消對(duì)齊的結(jié)構(gòu)前用
#pargma pack(1)
以該結(jié)構(gòu)后用
#pargma pack()
即可。

可以同時(shí)包括多個(gè)結(jié)構(gòu),也可以整個(gè)文件都包涵進(jìn)去。
gcc會(huì)自動(dòng)尋找該定義,并取消默認(rèn)的對(duì)齊方式。這種方法還是比較好的,比在gcc參數(shù)中加選項(xiàng)要好,可以不影響系統(tǒng)的庫(kù)方式 

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

用sizeof(aa)值為8,而不是5(32位環(huán)境下)。
這是不是由于GCC的對(duì)齊機(jī)制引起的?如何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中的規(guī)則,
pack(1) 表示一字節(jié)對(duì)齊。

bx_bird提到的是在Gcc中的規(guī)則,也表示單字節(jié)對(duì)齊。

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

uint8_t
__attribute((aligned (4)))

三 宏定義鏈接符

#define A(a) TEST_##a

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



關(guān)鍵詞: ARMCC匿名結(jié)

評(píng)論


技術(shù)專區(qū)

關(guān)閉