Несколько вопросов про uart

Тема в разделе "ESP8266, ESP32", создана пользователем Mitrandir, 23 авг 2018.

  1. Mitrandir

    Mitrandir Гуру

    1) функция обработчик получения данных передаваемая в uart.on получает 1 параметр.
    В документации сказано:
    Но если внутри обработчика написать type(data) всегда получаю String. Что тогда понимается под бинарными данными?

    2)в инструкции сказано :
    Если я указываю 0, о сначала вызывается обработчик для 1 символа, затем для всех остальных (отправляю строку с ардуино иде)

    3) что будет если функция обработчик очень длинная по времени и во время выполнения прилетит ещё один символ? Он встанет в очередь, или прервет функцию обработки первого символа?
     
  2. ИгорьК

    ИгорьК Гуру

    string.byte

    ???? в чем вопрос?

    Встанет.
     
    Mitrandir нравится это.
  3. ИгорьК

    ИгорьК Гуру

  4. ИгорьК

    ИгорьК Гуру

  5. Mitrandir

    Mitrandir Гуру

    В том что сказано если указать ноль, то функция будет вызываться для каждого символа в буффере,
    Но по факту получим:
    Код (C++):
    uart.on(0,0, function(d)
    file.open("log.txt","a+")
    file.writeline(d)
    file.close()
    end,  0)
    Если с ардуино иде послать слово hello
    Фаил будет таким
    А должен быть по строке на букву

    Если вместо ноля единицу поставить то вызывается для каждой буквы и по букве на строку
     
  6. ИгорьК

    ИгорьК Гуру

    Прими как данность :) Скорее всего, ноль - это по усмотрению интерпретатора :) Единица - это конкретно :)
     
  7. ИгорьК

    ИгорьК Гуру

    Что можно еще увидеть. Функции открыть/записать/закрыть файл - медленные функции.
    Интерпретатор вместо постановки в очередь callback для каждого символа просто складывает их в один стринг. Видимо, в целях экономии памяти.
    При указании точного количества байт на прием - интерпретатору приходится подчиняться.

    Если бы функция-обработчик была быстрее - возможно было бы по-другому. Типа:
    Код (Lua):
    tbl = {}

    uart.on(0,0, function(d)
        tbl[#tbl+1] = d
    end,  0)

    tmr.create():alarm(5000,0, function()
        table.foreach(tbl,print)
    end)
     
  8. Mitrandir

    Mitrandir Гуру

    Тогда выходит документация ошибочна, там написано для каждого символа.
     
  9. ИгорьК

    ИгорьК Гуру

    Ну да. Но, скорее, не исправлена во-время. Возможно раньше было так, а потом что-то изменилась. Просто косяк.
     
    Mitrandir нравится это.