将struct / union成员链接到另一个struct / union成员

时间:2017-02-07 06:43:14

标签: c

对于结构,工会和位域,我对C有点新,需要帮助。下面是SLPH_CONTROL,它将“控制”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;

有办法做到这一点吗?我真的很迷茫,并在网上到处寻找解决方案。欢迎任何建议!!!

谢谢,

埃里克

1 个答案:

答案 0 :(得分:0)

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

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

my_DRVCONF0my_DRVCONF1是您样本中的单个变量。因此,甚至不允许将它们分配/存储在连续的存储器中。 (如果启用某种字对齐,它们肯定不会。)

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