gpt4 book ai didi

c - 如何将 union 作为参数传递给函数

转载 作者:太空狗 更新时间:2023-10-29 17:01:17 29 4
gpt4 key购买 nike

此代码适用于 DAC 的驱动程序芯片。

我下面有一个位域,代表一个 24 位寄存器。所以我需要做的是填充位域并将其写出 SPI到芯片。

    typedef struct {
uint8_t rdwr_u8: 1;
uint8_t not_used_u8: 3;
uint8_t address_u8: 4;
uint8_t reserved_u8: 8;
uint8_t data_u8: 8;
uint8_t padding_u8: 8;
} GAIN_REG_st;

在我的初始化函数中,我创建了一个 union ,如下所示。

    union{
GAIN_REG_st GAIN_st;
uint32_t G_32;
} G_u;

现在我需要将 GAIN_REG_st 位域传递给将填充它的函数。

填充后,我可以将位域分配给一个 32 位整数,并将该整数传递给低级函数以覆盖 SPI。

如何将位域 GAIN_REG_st 传递给位于 union 内的函数? (你能展示一个函数原型(prototype)和调用吗?

函数如何访问位域的成员? (它会像 G_u.GAIN_st.rdwr_u8 = 1 吗?)

最佳答案

union G_u
the_union;

the_union.GAIN_st.address_u8 = 0x4;

function_call( &the_union );

void function_call( union G_u *the_union )
{
uint8
address;

address = the_union->GAIN_st.address_u8;

return;
}

你是这个意思吗?这是一个联盟,那么为什么要传递一个内部成员呢?它不会有任何区别。它们都从相同的内存偏移量开始。

关于c - 如何将 union 作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703671/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com