作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
此代码适用于 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/
我是一名优秀的程序员,十分优秀!