Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Где найти подробное описания по работе с pubsubclient.h

Тема в разделе "IoT Manager – мобильное приложение", создана пользователем Bposter, 4 окт 2016.

  1. combasoft

    combasoft Новичок

    Сообщения:
    35
    Симпатии:
    0
    Пока не могу с этим согласиться..
    Да, типа ДОС-овского системного 21h или там BIOS 10h или 09h (кажется, на 1-е аппаратное прерывание замаплен). Тут как, мне кажется, видение мира у нас одинаковое.
    Раньше их просто называли функциями обработчиками прерываний, ну ок.
    Картинка почти сложилась. Есть ли где дока по прерываниям ESP? Интересно глянуть какой номер прерывания с чем соотнесен, есть ли приоритеты. Я все еще подозреваю, что wifi модуль живет своей жизнью и висит на одном из прерываний + имеет доступ в отведенную ему область памяти (буфер под принятые пакеты). Типа принял пакет, положил данные и дернул прерывание, по аналогии с UART - мол вам письмо. А на прерывании уже сидит что-то со стороны Wiring.
    Вот это смущает. Либо нет разных приоритетов у прерываний, либо (что вероятнее) прерывания на время выполнения колбэк функции запрещаются, типа CLI -> тело функции -> STI. Но это значит, что мы запрещаем все прерывания, в том числе и более приоритетные, что чревато пропуском важных системных событий. А, не, отбой. Увидел слово "должна". Но опять же. Если мы хотим отреагировать на изменение на пине и не хотим монитроить его в цикле - мы навешиваем нашу функцию обработки изменения состояния пина на одно из прерываний, которое соотнесено с этим событием. Делаем это двумя способами: либо в таблице векторов прописываем адрес нашей функции либо каким-то образом добавляем вызов нашей функции из штатной функции обработки прерывания. Ничего страшного, если процессор в это время переключится на выполнение более приоритетной задачи - он же потом обратно вернется в то же место откуда его прервали. Разве что мы словим мелкую задержку. Если мы не строим что-то реалтаймовое, где все события должны происходить с точностью до тика, то это не критично.
     
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.168
    Симпатии:
    226
    @combasoft для пользователя Arduino IDE, Вы лезете в абсолютно ненужные дебри. Либо Вы уж пользуетесь готовыми либами и не заморачиваетесь (поправить ошибки в либах не в счёт), либо переходите на SDK/UDK и тогда копаете кишочки. На двух стульях сидеть не стоит, имхо.
     
  3. combasoft

    combasoft Новичок

    Сообщения:
    35
    Симпатии:
    0
    Для меня это нормально) Я просто хочу убедиться, что уже есть инструмент, который сохранит пришедшие пакеты, и не нужно городить что-то свое. В общем, не хочу надеяться на авось. Сделать это можно на мой взгляд двумя путями: увидеть как оно устроено, определиться какой ёмкости буфер ну или устроить нагрузочное тестирование, что попроще)

    Небольшой апдейт. Нашел в доке по эспрессиф:
    т.е. всё висит на проце, никакой отдельный модуль этими делами не занимается, только проц.

    Вот кстати вариант с нагрузочным тестированием - просто понять для себя при каких условиях оно начинает терять входящие данные.

    @Victor, не подскажете за yield() ? В приведенном вами примере вызовы этой функции используются в нескольких местах. Ардуиновская документация кратко отмечает, что это функция из экспериментальной либы и что она служит тому, что бы функция, в теле которой вызывается yield(), могла быть прервана.
    Не понятно по какому принципу расставлять вызовы yield() и почему ее вставляли в основной цикл, который вроде бы и так может быть прерван прерыванием.
     
  4. ivanpost67

    ivanpost67 Новичок

    Сообщения:
    23
    Симпатии:
    0
    Никто не подскажет, как в этой в PubSubClient(Client, Server, Port) загрузить параметры не из скетча а из EEPROM (системные, туда записаны с HTML) ?
    Во всех примерах функция стоит с явными строчными параметрами до void setup.. Квалификации нету осознать эту подстановку.
     

Поделиться этой страницей