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

Вопрос Атомарность выполнения команды (команда-ответ)

Тема в разделе "Прошивки, основанные на AT командах", создана пользователем koluna, 12 янв 2016.

  1. rst

    rst Читатель

    Сообщения:
    231
    Симпатии:
    7
    А что Вас удивляет-то? Вы открыли сокет, с этого момента в него можно писать. Писать может также и удалённая сторона.

    Не очень понятно какой атомарности Вы ожидаете? Атомарна (непрерывна) должна быть одна строка команды/сообщения. На взаимное расположение во времени этих строк никаких гарантий нет. Ваше ПО должно быть готово к любой последовательности сообщений.
    Своё понимание алгоритма работы с АТ-командами я приводил несколькими постами выше.
     
  2. DIYMan

    DIYMan Новичок

    Сообщения:
    4
    Симпатии:
    0
    Ага, конечно. Вы вообще читали, о чём я написал? Сокет я открыл с клиентской стороны, ВНЕЗАПНО, правда? Он может быть открыт к чёрту на рога, понимаете? И в этот момент В ЭТОТ ЖЕ сокет с ДРУГОГО адреса приходят данные. ВНЕЗАПНО, правда?

    Я же говорю - теоретики могут просто помолчать в сторонке. Практикам - ясно, что я написал. Для вас специально повторю последовательность:

    1. Открыта вебморда на локальном компе, которая несколько раз в секунду запрашивает ESP на предмет всяких команд. Для простоты считаем, что адрес вебморды в локальной сети 192.168.1.100;
    2. Со стороны микроконтроллера я открываю сокет на адрес google.com, вызывая AT+CIPSTART=0,"TCP","google.com",80;
    3. В порт падает 0,CONNECT;
    4. ВНЕЗАПНО в порт падает +IPD,0,14:CTGET=0|LIST - это запрос с ВЕБМОРДЫ на сокет, открытый на google.com!!!

    Где атомарность, Зин? Она должна быть на таком уровне, просто обязана. Ничем, кроме как кривыми руками китайцев сие поведение я объяснить не могу. Пример совершенно из жизни, только вместо google.com идёт отправка в MQTT-брокер, который на том же компе, что и вебморда. Причём, предвосхищая ваше возможное "Ну вот, адреса-то одинаковые!", отмечу - адреса-то одинаковые, вот только порты разные, да и время открытия соединений НИКОГДА не будет в точности одинаковым - всегда кто-то вперёд, а кто-то - после. И если я открыл сокет - я его хозяин, давать этот же сокет другому клиенту - по меньшей мере коммунизмом попахивает.

    Ваше понимание, безусловно, важно, но - только для вас. Если бы вы меньше теоретизировали, а просто попробовали на практике - вы бы поменяли своё понимание, кмк. На практике - есть неоднозначность работы AT-прошивки версии 0.40, которая позволяет себе вольности, которые, в свою очередь, НИКАК не разрулить никакой логикой работы с AT-прошивкой.

    Ещё раз про атомарность: когда я подал команду AT+CIPSTART - я ожидаю, и совершенно справедливо, что по результату отработки этой команды мне вернётся либо:

    1. Открытый сокет для моего соединения;
    2. Ошибка, если кто-то в этот слот уже успел подконнектиться.

    Но никак не ответ 0,CONNECT, а потом - данные с другого внешнего адреса. Так понятней? Впрочем, ответом не утруждайтесь, и прошу извинить за излишнюю резкость - недолюбливаю теоретиков, которые считают, что они всё знают лучше всех. Я не ищу здесь решения проблемы с кривой китайской прошивкой, я просто информирую общественность, что проблема - есть, и подтверждается не только мной, я хотя бы тем фактом, что (читать тут): Releases · espressif/ESP8266_NONOS_SDK · GitHub


    Кстати сказать, Козюльский (с) "Ширли-Мырли" - слот при таком пересечении, как описано выше - реально тупо подвисает в 0.40, можете проверить.

    Я сказал всё, думающий - поймёт. Дальнейшие поучения меня всяким жизненным понятиям - бессмысленны.

    З.Ы. Причём что безмерно удивляет в теоретиках - тот простой факт, что они читать неспособны, от слова "совсем": в приведённом мной примере в предыдущем сообщении ЯСНО ВИДНО, что коннект идёт к ThingSpeak.com на один внешний IP, и в этот же слот ВНЕЗАПНО падают данные с IP локальной сети. Китайская прошивка, видимо, написана вот такими же теоретиками, которые считают, что это нормально - пересекать два непересекающихся сокета. Норм, чо - так и живём.
     
  3. rst

    rst Читатель

    Сообщения:
    231
    Симпатии:
    7
    Слушайте, господин "практик", пока вы тут разводите сопли по несколько страниц, у меня устройство на базе ESP8266 работает уже не первый год. Нежданчик, да? И работает не с типа
    (пару раз в секунду отправить два байта - это да - ну ОЧЕНЬ интенсивная нагрузка, куда уж нам) :D:D:D
    а с реально непрерывным поток данным 40 кБ/сек и выше. И так непрерывно по несколько часов. Опять нежданчик, да?
    А вам советую, включить мозг и тренировать его, а не пальцы на клавиатуре. Или найти человека, кто вам сможет сделать ваше устройство раз сами способны только графоманствовать, а головой думать неспособны.
    В дальнейшем - разбирайтесь со своими багами сами, что-то советовать вам - бессмысленно... запущенный случай. И идите в игнор.
    Это и видно что не ищите, просто по@#$деть сюда зашли. Проблема находится у вас между ушей. :D
     
    Последнее редактирование: 3 мар 2018

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