1) функция обработчик получения данных передаваемая в uart.on получает 1 параметр. В документации сказано: Но если внутри обработчика написать type(data) всегда получаю String. Что тогда понимается под бинарными данными? 2)в инструкции сказано : Если я указываю 0, о сначала вызывается обработчик для 1 символа, затем для всех остальных (отправляю строку с ардуино иде) 3) что будет если функция обработчик очень длинная по времени и во время выполнения прилетит ещё один символ? Он встанет в очередь, или прервет функцию обработки первого символа?
В том что сказано если указать ноль, то функция будет вызываться для каждого символа в буффере, Но по факту получим: Код (C++): uart.on(0,0, function(d) file.open("log.txt","a+") file.writeline(d) file.close() end, 0) Если с ардуино иде послать слово hello Фаил будет таким А должен быть по строке на букву Если вместо ноля единицу поставить то вызывается для каждой буквы и по букве на строку
Что можно еще увидеть. Функции открыть/записать/закрыть файл - медленные функции. Интерпретатор вместо постановки в очередь 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)
Ну да. Но, скорее, не исправлена во-время. Возможно раньше было так, а потом что-то изменилась. Просто косяк.