crj*_*j11 5 c embedded arm unions bit-fields
下面的typedef是来自Atmel SAMD21 ARM MCU包含文件的DIR寄存器.由于位struct成员和reg成员都是32位,因此联合中的两个成员之间是否有任何区别?
我试图理解为什么他们不只是使用uint32_t作为DIRSET寄存器的类型.我唯一认为他们只是这样定义它与其他寄存器一致,其中bit结构中有多个字段.
typedef union {
struct {
uint32_t DIRSET:32;
} bit;
uint32_t reg;
} PORT_DIRSET_Type;
Run Code Online (Sandbox Code Playgroud)
从一般的角度来看,它只是代码膨胀 - 你没有理由想要编写这样的代码.但是,ASF编码风格是每个寄存器访问都.reg以此结束,因此这就是原因:他们希望保持寄存器命名并使用一致性.
他们当然可以做到这一点,typedef struct { uint32_t reg; } PORT_DIRSET_Type但这个代码库很少能够合理地编写.它可以通过某些脚本自动生成.
根据经验,像这样的寄存器地图总是非常丑陋和不便携,充满了不合理的代码.作为ASF的一部分发货的是我见过的所有类别中最糟糕的一些.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |