C 将结构/联合成员链接到另一个结构/联合成员

C 将结构/联合成员链接到另一个结构/联合成员,c,C,在结构、并集和位字段方面,我对C有些陌生,需要帮助。下面是SLPH_控件,它将“控制”DRVCONF0和DRVCONF1目标中的位。在代码片段之后,我将解释我需要什么 /* SLPH_CONTROL **********************************************/ typedef union { struct { unsigned int SH0_BIT0 :1; unsigned int SH0_BIT1 :1;

在结构、并集和位字段方面,我对C有些陌生,需要帮助。下面是SLPH_控件,它将“控制”DRVCONF0和DRVCONF1目标中的位。在代码片段之后,我将解释我需要什么

/* SLPH_CONTROL **********************************************/

typedef union
{
    struct
    {
        unsigned int SH0_BIT0 :1;
        unsigned int SH0_BIT1 :1;
    };
    uint8 SLPH_CONTROL_byte;
} SLPH_CONTROL;

SLPH_CONTROL my_SLPH_CONTROL;

/* DRVCONF0 **********************************************/

typedef union
{
    struct
    {
        unsigned int DF0_BIT0 :1;
        unsigned int DF0_BIT1 :1;
        unsigned int DF0_BIT2 :1;
        unsigned int DF0_BIT3 :1;
        unsigned int DF0_BIT4 :1;
    };
    uint8 DRVCONF0_byte;
} DRVCONF0;

DRVCONF0 my_DRVCONF0;

/* DRVCONF0 **********************************************/

typedef union
{
    struct
    {
        unsigned int DF1_BIT0 :1;
        unsigned int DF1_BIT1 :1;
        unsigned int DF1_BIT2 :1;
        unsigned int DF1_BIT3 :1;
        unsigned int DF1_BIT4 :1;
    };
    uint8 DRVCONF1_byte;
} DRVCONF1;

DRVCONF1 my_DRVCONF1;
现在,通过上面的代码,我想链接或复制数据,如下所示:

SH0_BIT0:1 to DF0_BIT4:1;
SH1_BIT1:1 to DF1_BIT0:1;
有办法做到这一点吗?我真的迷路了,在网上到处寻找解决办法。欢迎任何建议

谢谢


Eric

也许这在特殊的嵌入式H/W(我不知道)上是可能的,但在标准C的普通PC上是不可能的

位字段描述一个或多个连续字节中的单个位。实际上,字节是可寻址的,但位不是。对位的读/写访问在内部通过逐位操作解决(如在C中用
&
|
^
~
表示)

my_DRVCONF0
my_DRVCONF1
是示例中的单个变量。因此,它们甚至不能被分配/存储在连续的内存中。(如果启用某种单词对齐,它们肯定不会。)


您可能必须使控件更复杂(例如,提供地址和位索引对)才能执行预期的操作。

唯一的方法是使用两个赋值语句。对
SH0
位的更改不能自动反映在相应的
DFx
位中。并且没有办法创建指向位字段的指针。如果您碰巧使用位字段作为单个寄存器位的映射,请查看此处
my\u SLPH\u CONTROL.SH0\u BIT0=my\u DRVCONF1.DF0\u BIT4等。。将它放在一个函数中,该函数将指向联合体的指针作为参数。感谢大家的输入。我做了你提到的2501,那就是:谢谢大家的意见。2501:我在发布之前就这么做了,但没有想到要把它放在一个函数中。您建议我如何将其放入函数2501中?my_SLPH_CONTROL.SH0_BIT0=my_DRVCONF1.DF0_BIT4;是的,命名方案非常糟糕,但在实现之前,它想快速地组合一些东西来测试一个想法。这是一个嵌入式微控制器应用程序使用GCC C99。。。