gpt4 book ai didi

c - 这个C union 的成员有什么区别吗?

转载 作者:太空狗 更新时间:2023-10-29 15:00:03 26 4
gpt4 key购买 nike

下面的 typedef 适用于 Atmel SAMD21 ARM MCU 包含文件中的 DIR 寄存器。由于bit struct成员和reg成员都是32位的,那么这两个成员在union中有什么区别吗?

我试图理解为什么他们不只是使用 uint32_t 作为 DIRSET 寄存器的类型。我唯一的想法是,他们只是以这种方式定义它,以便与位结构中有多个字段的其他寄存器保持一致。

typedef union {
struct {
uint32_t DIRSET:32;
} bit;
uint32_t reg;
} PORT_DIRSET_Type;

最佳答案

从一般的角度来看,这只是代码膨胀——您没有理由想要编写那样的代码。然而,ASF 编码风格是每个寄存器访问都以 .reg 结尾,所以这就是这里的原因:他们希望保持寄存器命名和使用一致。

他们当然可以用 typedef struct { uint32_t reg; } PORT_DIRSET_Type 但是这个代码库很少被合理地编写。它可能是通过某些脚本自动生成的。

根据经验,像这样的寄存器映射总是非常丑陋且不可移植,充满了不合理的代码。那些作为 ASF 的一部分发货的是我见过的所有类别中最糟糕的一些。

关于c - 这个C union 的成员有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898273/

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