Dmitriy
Если без аргумента?
Igor
Если удалять из середины/начала таблицы, то происходит переиндексация
Dmitriy
Получается следующее: if control ==4 and value==1 then table.insert(data, out1_up) table.insert(data, out2_up) table.insert(data, out3_up) end Затем в таймере on_timer() uart_send_data(table.remove(data, 1)) end
Dmitriy
Это своего рода fifo механизм
Верно? Сейчас попробую)
Igor
Только не забудь таймер запустить функцией start_timer, или как она там называется
Dmitriy
работает)))
Dmitriy
17:53:23.275 DBG error [string "out1_up={0xA5,0xC3,0x3C,0x5A,0xFF,0x36,0x05,0..."]:51: attempt to get length of a nil value (local 'msg')
Dmitriy
А как избежать таких сообщений?
Igor
В таймере в самом начале функции сделай что-нибудь типа if #data < 1 then return end
Dmitriy
сейчас попробую
Dmitriy
при размере таблицы меньше нуля - закончить функцию
Александр
Ещё как очень своеобразное решение - собери gcc usleep.c -o usleep // usleep.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { if(argc == 2) { int msec = atoi(argv[1]); usleep(msec); } else { printf("Ошибка, не передан параметр\n"); } return 0; } Затем из ванильной луа можно звать через os.execute("./usleep 200000") решение не особо элегантно, но работает, хотя тут вопрос к возможностям сред в которых ты запускаешь.
Hello, World! 🎄
Не кросплатформено, хотя можно собрать под несколько платформ и в коде несколько раз дергать запуск
А если в стандартных модулях есть метод который название ос выводит, то можно определить и уже запускать нужный исполняемый файл
Aqendo
сделать зависимость к скрипту в виде gcc и при каждом выполнении компилировать бинарник и использовать 😈😈😈
Александр
Легче уж луа либу скомпилить, не?
Ну не соглашусь, ибо тогда может быть столкновение с версиями луа или придётся тратить время на поиски) Плюс приведённый код - позволят минимальными усилиями получить usleep и не думать откуда взять код(вряд ли роскошь в виде lr будет в тему) и как его собрать
Александр
Не кросплатформено, хотя можно собрать под несколько платформ и в коде несколько раз дергать запуск
Согласен, но кроссплатформится в +6-10 строк, поэтому исправить это можно
Aqendo
Я бы написал другое слово из пяти букв с Х посредине, но пусть будет так.
Hello, World! 🎄
И у пользователя не будет этих компиляторов...
Aqendo
Еслиб я знал что это
Предположения слово в слово совпали с реальностью
Александр
Еслиб я знал что это
Это крутой минималистичный компилятор Си
Dmitriy
Точно, проверку надо сделать
Затестил в железе - все работает идеально. Спасибо большое за помощь! Узнал много интересного
Hello, World! 🎄
Это невозможно. Готовая система - все что могу - писать main.lua
Значит используй мой вариант где будет цикл
Dmitriy
Значит используй мой вариант где будет цикл
не, я использовал очереди - превосходный вариант. я узнал кк пользоваться таблицами - и это оказалось так просто
Dmitriy
в вашем варианте только секунды кстати
Hello, World! 🎄
Dmitriy
я в гугл сразу полез - но там или сокеты используют какие-то, которых нет, или слип разный но основанный на секундах
Dmitriy
А таблицы тут при чем?
изящное решение - где в прерывании таймера на 200мсек происходит обработка очереди команд
Dmitriy
да, я сразу же понял, как это можно использовать и во множестве других случаев. Как же приятно все-таки познавать что то новое и потом понимать где это можно применить. Несмотря на то, что судьба зашвырнула меня в луа ( где я был 0) теперь стало полегче
Snusmumriken
не вариант для встройки
А на встройке — читай доку встройки. Она должна предоставлять расширения для интерпретатора.
Snusmumriken
Например у nodemcu есть dsleep где ты можешь усыпить на микросекунды.
Igor
А на встройке — читай доку встройки. Она должна предоставлять расширения для интерпретатора.
Это я как раз и написал, но люди продолжали предлагать невстраиваемые варианты)))
Dmitriy
А если не секрет, то что ты на Lua пишешь?
в основном обработчики команд и небольшую автоматизацию
Dmitriy
А на встройке — читай доку встройки. Она должна предоставлять расширения для интерпретатора.
Там этого нет, есть сухой документ по некоторым дополнительным инструментам полностью на китайском. У меня небыло никакого выбора. Просто пришлось столкнуться с этим оборудованием лоб в лоб
Dmitriy
Например у nodemcu есть dsleep где ты можешь усыпить на микросекунды.
на watchdog таймере скорее всего реализовано, у котрого прерывание на пине сидит
Dmitriy
Хочу ее раскурить в скором времени. Про nodemcu на нее тоже слышал. Кто работает с этим - что скажете - какие очевидные плюсы и минусы есть?
Dmitriy
я в основном работаю с СИ. Сейчас стал осваивать python и столкнулся с луа. По системам мне интересно освоить rtos так как по менеджменту они неплохи в плане гибкости и задачности
jesus-2.6.tar.gz ☮︎
Хех
Snusmumriken
Хочу ее раскурить в скором времени. Про nodemcu на нее тоже слышал. Кто работает с этим - что скажете - какие очевидные плюсы и минусы есть?
Очевидные плюсы: оно есть. При подключении внешней памяти можно через извращения сделать неограниченный размер программы, подгружая и выгружая модули по необходимости. Очевидные минусы: сборка мусора, ослабленный реалтайм, не подходит для строгих задач вроде управления шаговыми двигателями.
Dmitriy
Dmitriy
Snusmumriken
Ну знаешь, например у тебя есть 3д-принтер. И он тупой, управляется например принимая команды по spi в реальном времени: "начать двигаться вперёд, остановиться, начать двигаться назад" и так далее. И ты не можешь управлять им с компа например, потому что накапливается гора ошибок таймера, потому что комп не может просто так взять и переключиться на процесс в нужное время чтобы отправить команду в конкретную микросекунду не выжирая 100% одного ядра. И ты берёшь ардуину, которая в миллиард раз менее мощная чем твой камплюхтер, зато способна ровно в НУЖНОЕ время запускать и останавливать движки без особых ошибок. А луёвая nodemcu не может по тем же причинам что и пк. Или может но надо немножко изгаляться.
Dmitriy
Ну, собственно часы собраны на 168 Меге 16мгц. 250 адресных диода и шаговик 96 шагов\оборот
Snusmumriken
А не слишком ли оверкилл? )
Snusmumriken
Ну кста должно быть нормась, но имхо всё равно оверкилл, и питать их кажись приходится от розетки. Как хобби-прожэкт ништяк )
Dmitriy
Ну кста должно быть нормась, но имхо всё равно оверкилл, и питать их кажись приходится от розетки. Как хобби-прожэкт ништяк )
Автономное питание. 3.5А\ч на 1 час 56 минут в среднем режиме. Флеш израсходована на 85%, рама на 99%
Dmitriy
168 мега - 1кб рам и 16кб флеш
Dmitriy
В режиме сна потребление 5 мкА
Dmitriy
Пульт по автономности - при часе работы в день на 30 дней хватает
Dmitriy
Там 920мА аккум. В режиме сна 1 мкА
Денис
Ох и злая же IntelliJ...
Денис
Дался ей этот нулевой индекс... Там таблица используется для извлечения значения по стейту...
Денис
Хотя, тут и повеселее вещи есть...
Snusmumriken
Это не intellij, это luacheck, ты можешь использовать его и вне интелы.
Денис
Это не intellij, это luacheck, ты можешь использовать его и вне интелы.
Так его у меня нету! Посмотрел в плагин - тоже нет
Snusmumriken
Он скорее всего встроен в аддон для интеллы. Может числится в списке лицензий аддона.
Денис
Что-то не могу сообразить: а можно ли как-то игнорировать такого рода проблемы...
Snusmumriken
Что-то не могу сообразить: а можно ли как-то игнорировать такого рода проблемы...
Должно быть примерно такое: https://luacheck.readthedocs.io/en/stable/inline.html local function f() -- luacheck: ignore g3() -- func with warning will no raise warning. end
Anonymous
Хм, а кто то запускал луа через wasm в вебе?