這是一個遠射,但也許會有一些想法。在我編程的系統中,我定義了結構來編程處理器寄存器。寄存器由幾個位組成,每個位都有幾個位,其間可能有「保留」位。寫入寄存器時,保留位必須寫爲零。如何將預定義的值賦給類型定義上的結構成員?
例如:
typedef struct {
uint32_t power : 3;
uint32_t reserved : 24;
uint32_t speed : 5;
} ctrl_t;
void set_ctrl()
{
ctrl_t r = {
.power = 1;
.speed = 22;
.reserved = 0;
}
uint32_t *addr = 0x12345678;
*addr = *((uint32_t *) &r);
return;
}
我希望能夠給reserved
字段設置爲(在本例中爲0)的默認值,並騰出一個明確的賦值需要(發生了很多我們的系統)。
注意,如果實例化的對象是靜態的,則默認情況下未初始化的字段將是0。然而,在上面的例子中,沒有保證的,也是我需要設置任意值。
恐怕你不能。如果你的變量不是靜態的,那麼你需要明確地初始化它。 –
關於位域的特定佈局不能保證。如果你需要,他們不是一個好主意。改用'unit32_t'和shift/masking。你施放調用未定義的行爲;你必須以不同的類型訪問一種類型的對象!閱讀有效類型(aka嚴格別名)規則。 – Olaf
@Olaf - 在給定的實現(我們的嵌入式開發環境)中,行爲應該被很好地定義(因爲它恰好是)。我使用all-'uint32_t'結構的事實確保了這些字段是右對齊的,並且該結構的大小恰好是32位。 – ysap