12.21.2006

Structure Padding in ARM Compiler (ADS)

USB 的standard configuration descriptor 宣告:
typedef __packed struct CONFIGURATION_DESCRIPTOR
{
char bLength;
char bDescriptorType;
unsigned short wTotalLength;
char bNumInterfaces;
char bConfigurationValue;
char iConfiguration;
char bmAttributes;
char MaxPower;
} CONFIGURATION_DESCRIPTOR;
嗯。size是9 (bytes)。奇數。

在code中,sizeof(this structure) 的話,會顯示 10 - 偶數。

這是因為ARM Compiler (ADS) 自動加上padding 的關係,可以在compiler 選項中enable "warning padding",就可以看到這個structure 出現warning。

如果要compiler 不加上padding 的話,就要將上"__packed " 這個修飾字 (ref DUI0067D_ADS1_2_CompLib.pdf )。

這樣,sizeof( this structure ) 就會是9了。

2 則留言:

匿名 提到...

是 10 而不是 12 嗎?
Thumb Mode or 32bit Mode
我沒有用過這東西 但是一般 Compiler Data Padding 會用 WORD 的倍數吧

checko 提到...

真的是10呢,而且也沒有開啟thumb mode。

我還用ICE 看 (雖然好像多此一舉)。