Как использовать перечислимые структуры типов в C? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь настроить ЖК-экран Nokia таким образом, чтобы все пиксели были выключены, все пиксели включены, включен обратный режим и включен нормальный режим, в зависимости от того, какую кнопку нажимает пользователь. У меня есть весь код, кроме установки режима ЖК-экрана. Это потому, что они отображаются в виде структур перечислимых типов, и я не знаком ни с одной из этих концепций. Структура:

typedef enum lcd_display_mode_t {
    lcd_display_all_off = 0b000,
    lcd_display_all_on  = 0b001,
    lcd_display_normal  = 0b100,
    lcd_display_inverse = 0b101,
} lcd_display_mode_t;

Мое лучшее предположение состоит в том, что, будучи перечисляемым типом, я просто должен был бы напечатать:

if SWITCH X IS ON{
    lcd_display_mode_t = 0;
}

Что бы установить режим отображения lcd_display_all_off. Это правильное использование структур в этом контексте? Если нет, что бы я набрал, чтобы установить режимы отображения?

1 Ответ

0 голосов
/ 09 мая 2018

Перечисление не является структурой. Использование перечислений для хранения двоичных данных - плохая идея. Каждый получает все виды странных побочных эффектов, таких как тип, используемый как подписанное int - что, в свою очередь, совершенно не подходит для вида аппаратного программирования, для которого он будет использоваться. Кроме того, двоичные литералы даже не являются стандартными C.

Обратите внимание, что typedef делает lcd_display_mode_t типом, а не переменной. Кто бы ни написал код, был немного запутан, достаточно было бы просто написать typedef enum { ... } lcd_display_mode_t;.

Они намеревались использовать такой код:

lcd_display_mode_t mode;
...
mode = lcd_display_all_off;
...