• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Что не так со структурой?

Atom

Member
Всем привет.

написал следующий код:

C++:
typedef struct{
  bool check1: 1;
  bool check2: 1;
  bool check3: 1;
  bool check4: 1;
  bool check5: 1;
  bool check6: 1;
  uint8_t rest78: 2;
  uint8_t  timer2off;
} bits64_t;

typedef union {
  bits64_t bits_;
  uint64_t int_;
} userdata_t;

void hh_check_arguments( bool nup, userdata_t* a_ud ){

  userdata_t ud;
    ........
}       
.......
и получаю сообщения от компилятора:

Bash:
Z:\Arduino\esp\esp8266_smartswitch2\esp8266_smartswitch2.ino: At global scope:
esp8266_smartswitch2:155:36: error: 'userdata_t' has not been declared
  155 | void hh_check_arguments( bool nup, userdata_t* a_ud ){
      |                                    ^~~~~~~~~~
В чем не прав?
 

enjoynering

Well-known member
Если мне не изменяет память, в struct нельзя задавать default values.

Te вот так нельзя :
Код:
bool check1: 1;
Вот так можно:
Код:
bool check1;
 

enjoynering

Well-known member
Спасибо, очень интересно. Не знал.

Я пакую так:
Код:
typedef struct
  uint8_t rest78;
  bool check;
} __attribute__((packed)) foo;
 

Atom

Member
Я пакую так:
Код:
typedef struct
  uint8_t rest78;
  bool check;
} __attribute__((packed)) foo;
Структуры помимо прочего подвергаются выравниванию по размеру сегмента. Обычно это 16 байт. Реально используется всего 2 байта, но компилятор добавит еще 14. Хотя экспресиффовский компилятор ставит align 8 байт, то будет добавлено 6. Заданием этого атрибута ты обрезаешь ненужные байты. но твой bool будет использовать 8 бит там, где нужен только 1 бит.
Так как я засовываю эту басню в eeprom, то каждый бит играет значение.

Но это не в тему, оффтоп. Меня волнует проблема с компиляцией функции, где входной параметр указан в виде ссыли на структуру, а не на тип.
 
Сверху Снизу