Размер структур и классов в программах на ESP8266

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ส.ค. 2024
  • Из-за выравнивания полей структур и классов, занимаемый вашими типами данных размер оперативной памяти может значительно превосходить ваши ожидания.
    Если скорость доступа к структурам (полям классов) не является критичной, то можно заставить компиллятор упаковать тип, добавив в описание типа конструкцию
    __attribute__((__packed__))
    Пример из видео (код для PlatformIO, в случае с Arduino IDE переименовать файл src\main.cpp в StructSize_Test.ino и перенести его из подкаталога src в каталог проекта): drive.google.c...

ความคิดเห็น • 25

  • @whynot8140
    @whynot8140 5 ปีที่แล้ว +7

    У меня лично каждый ролик как продолжение сериала захватывающего. Всегда рад. Спасибо!

  • @user-oz3kc6vh6b
    @user-oz3kc6vh6b 5 ปีที่แล้ว +2

    Поставил палец вверх на первой секунде просмотра , за то что уже не ждал , и за то что надо чаще

  • @Happinesstoom
    @Happinesstoom 2 ปีที่แล้ว +1

    Алекс, откопал:
    #pragma pack(push,1)
    struct {...};
    #pragma pack(pop)
    Выравнивает в 1 байт. Последняя строка возвращает все как было для последующего кода.
    Вдруг будет время затронуть это в каком-то видео. Интересно было бы вас послушать.

  • @Gartenzwerg
    @Gartenzwerg 4 ปีที่แล้ว

    Очень здорово, что мне этот канал попался. До этого я в основном из
    Random Nerd Tutorials информацию черпал. Спасибо.

  • @stenzoautomatic
    @stenzoautomatic 5 ปีที่แล้ว +1

    Алекс,молодец!!!Единственный русскоязычный контент по Platformio,на днях начну с помощью него подключать к esp8266 внешний ацп ads1115 и выводить значение на дисплей nextion,если бы не вы, то так и изучал бы Arduino IDE.Даёшь больше роликов!!!!

  • @DimiEG
    @DimiEG 5 ปีที่แล้ว +1

    Спасибо за уроки. Не зря Вас подбадривали ;)

  • @alexandervinogradov6856
    @alexandervinogradov6856 2 ปีที่แล้ว

    Спасибо, очень полезно! Даже для копипастера. Начал передавать данные с ардуины на esp8266 и ... улетает нормально, а приходит куча мусора. Добавил __attribute__((__packed__)) и все заработало как надо.

  • @Ek_Ko
    @Ek_Ko 2 ปีที่แล้ว +1

    Использование __attribute__((__packed__)) с помещением элемента в вектор приводит к спонтанным перезагрузкам.

  • @alexandern8671
    @alexandern8671 5 ปีที่แล้ว +1

    Лично я понятия не имел о таком атрибуте, спасибо. КМК для практических целей должно быть достаточно в структуре сначала объявить все uint32_t, затем все двухбайтовые, затем все однобайтовые поля. Вперемешку, конечно, хуже всего. Дополнительное время для packed, скорее всего, требуется из-за того, что читается все четырехбайтовое слово, и затем оно маскируется и сдвигается до получения нужных двух или одного байта.
    Для себя - установить наконец PlatformIO

  • @ShkolnikPrahramist
    @ShkolnikPrahramist 5 ปีที่แล้ว +1

    Пишу hello world'ы на плюсах. Очень интересно смотреть. Спасибо за контент.

  • @yuriyrr5672
    @yuriyrr5672 3 ปีที่แล้ว +1

    стандартная упаковка #pragma pack(1) прекрасно работает

  • @olegkozlov302
    @olegkozlov302 ปีที่แล้ว

    Спасибо за ролик. Канал все-таки про нюансы, поэтому для пользователей, кто хочет или вынужден становиться продвинутым. Для меня например очень полезно. А насчет монетизации, можно и на чашечку кофе иногда скинуться, только куда?

  • @alexejhripunkov5997
    @alexejhripunkov5997 5 ปีที่แล้ว

    Очень интересно. Спасибо.

  • @user-ib4os8fl8s
    @user-ib4os8fl8s 4 ปีที่แล้ว

    Алекс ты красава

  • @alexkiller9051
    @alexkiller9051 4 ปีที่แล้ว

    За выводы спасибо

  • @CmuT_B_naJIbTo
    @CmuT_B_naJIbTo 3 ปีที่แล้ว

    Размеры структур и всего остального можно посмотреть в Project inspection на platformio ide

  • @Dialbist
    @Dialbist 5 ปีที่แล้ว

    А мне что-то Платформио не зашел, что-то геморно было добавлять библиотеки не стандартные, короче постоянно ошибки сыпались, можно было конечно разобраться, но я взял локальную VisualStudio c надстройкой MicroVisual, кстати рекомендую для локальной разработки. А вот в Arduino IDE нереально нормально работать конечно и тем более писать большой код

    • @sergewddm
      @sergewddm 5 ปีที่แล้ว

      Я тоже долго сидел на Visual Micro + MS Visual Studio. Теперь окончательно перешёл на Platformio (в том числе благодаря роликам автора данного канала) после того, как повесил некоторые свои устройства на ESP8266. А именно, нужно было слегка модернизировать код в ESP8266. Но после заливки новой версии прошивки по OTA, WiFi в ESP отвалился и MQTT соответственно тоже. Дальнейшая загрузка по OTA стала невозможной. Это случилось из- за изменения кода (обновления) некоторых библиотек + мой кривой код ☺. Накануне переустанавливал винду и Arduino со всеми библиотеками. Так вот, пришлось вытаскивать свою железку из труднодоступного места и перешивать её шнурком.
      Используя Platformio, нужные библиотеки настраиваются очень гибко (указание определённых версий и т.д.).
      P.S. Alex, спасибо за интересные видео. Данный материал смотрел с большим удовольствием. Очень познавательно для любителей электроники и программирования.

  • @user-xi2hl8xn7p
    @user-xi2hl8xn7p 5 ปีที่แล้ว +1

    Интересует микрообзор IDE для незнакомого с ней балбеса(возможности и т.п.) и краткие рекомендации по использованию.

    • @alexmorozov73
      @alexmorozov73  5 ปีที่แล้ว

      По PlatformIO у меня есть ролик.

    • @user-xi2hl8xn7p
      @user-xi2hl8xn7p 5 ปีที่แล้ว

      @@alexmorozov73 Спасибо.

  • @alexgalstyan
    @alexgalstyan 5 ปีที่แล้ว

    Спасибо, очень полезная информация. Я вот ещё не разобрался, насколько я помню функция тоже имеет вес и в данном примере он не учтен. Не могу понять причину, думаю причина в sizeof

    • @alexmorozov73
      @alexmorozov73  5 ปีที่แล้ว

      Код функций (методов) не располагается в оперативной памяти и в случае классов он один для всех экземпляров класса, поэтому не учитывается.
      На самом деле, класс занимает больше памяти, чем сумма его свойств, т.к. в случае виртуальных функций есть еще VTBL, правда в последних версиях Arduino для ESP8266 VTBL может храниться во флеше.

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 4 ปีที่แล้ว

    Ну и что здесь нового? Обычное выравнивание. И дело тут не в скорости. Просто многие архитектуры не позволяют обращаться к данным по невыровненным адресам, и выкидывают исключение.

  • @alexkiller9051
    @alexkiller9051 4 ปีที่แล้ว

    Как по мне так такие выводы в каждом мануале крупными буквами в начале, писать нужно