Есть ли разница между членами этого союза C? - PullRequest
0 голосов
/ 27 февраля 2019

Приведенный ниже typedef предназначен для регистра DIR из включаемого файла Atmel SAMD21 ARM MCU.Поскольку элемент bit структуры и член reg являются 32-битными, есть ли разница между двумя членами в объединении?

Я пытаюсь понять, почему они не просто использовали uint32_t в качестве типа длярегистр DIRSET.Я только думал, что они просто определили его таким образом, чтобы он соответствовал другим регистрам, в которых есть несколько полей в структуре битов.

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

1 Ответ

0 голосов
/ 27 февраля 2019

С общей точки зрения, это просто раздувание кода - нет причины, по которой вы когда-нибудь захотите написать такой код.Тем не менее, стиль кодирования ASF заключается в том, что каждый доступ к регистру заканчивается на .reg, поэтому на это есть причина: они хотят сохранить именование регистров и использовать их согласованно.

Конечно, они могли бы просто сделать это с помощью typedef struct { uint32_t reg; } PORT_DIRSET_Type но эта кодовая база редко когда-либо рационально написана.Это могло быть автоматически сгенерировано с помощью некоторого сценария.

Как правило, такие карты регистрации всегда ужасно уродливы и непереносимы, заполнены иррациональным кодом.Они поставляются как часть ASF - одни из худших, которые я когда-либо видел во всех категориях.

...