Я использую код MPLABX IDE MCC. В некоторый момент в драйвере UART есть следующий код для состояния UART.
typedef union {
struct {
unsigned perr : 1;
unsigned ferr : 1;
unsigned oerr : 1;
unsigned reserved : 5;
};
uint8_t status;
}uart1_status_t;
Насколько я понимаю, в объединении есть 2 типа, 1 структура и 1 8-битная переменная без знака. У меня есть 2 вопроса:
- что на самом деле ... perr: 1; Что здесь сделано? тип не указан, только без знака написано и что такое ": 1"? Это не значение, данное perr? Когда я попробовал это на компиляторе C, я увидел, что это на самом деле биты переменной состояния. perr и ferr - 0-й и 1-й биты, но oerr - 4-й? Почему?
- Структура не имеет «экземпляра», так как я могу получить к нему доступ? Я запутался в этом разделе. Поскольку это объединение, эти биты и переменная состояния хранятся в одной и той же ячейке памяти, поэтому всякий раз, когда я пытаюсь получить доступ к состоянию, это также означает доступ к этим значениям perr, ferr, oerr? Это правильно?