hohserg 197 Опубликовано: 31 октября, 2019 Актуальность Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было записать прошивку на eeprom через компьютер, снять устройство, заменить eeprom через верстак поставить устройство Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки Решение Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее. Использование Загружаем файлы из этой папки(wget) https://github.com/hohserg1/OpenComputersPrograms/tree/master/wireless_flash Прошиваем наш eeprom прошивкой wireless_flash_eeporm.lua и вставляем в устройство Копируем адрес сетевой карты устройства Запускаем устройство Вызов команды wireless_flash покажет usage Последний использованный адрес сетевой карты устройства запоминается Теперь можем быстро тестировать прошивки Программа пока не особо функциональна, но вполне юзабельна. При разработке ПО для дрона рекомендую юзать планшет. Какие фичи еще стоит добавить(наверное, я это сделаю): Сохранение принятой прошивки Получение текущей прошивки устройства Сохранение множества адресов беспроводных карт 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 31 октября, 2019 (изменено) 42 минуты назад, hohserg сказал: Актуальность Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было записать прошивку на eeprom через компьютер, снять устройство, заменить eeprom через верстак поставить устройство Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки Решение Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее. А можно использовать мою программу. Там есть и возврат ошибок, так же там есть интерпретатор(можно вживую, как на компьютере, протестировать какую-то вещь). Там и есть загрузка файлов, и так же можно при желании даже перепрошить дрона=) UPD: А у @Fingercomp эта штука в openprograms уже висит 3 года https://github.com/OpenPrograms/Fingercomp-Programs/tree/master/net-flash Изменено 31 октября, 2019 пользователем BrightYC 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 197 Опубликовано: 31 октября, 2019 При помощи ПДУ можно тестировать произвольные прошивки? Не только для дрона? 37 минут назад, BrightYC сказал: в openprograms уже висит 3 года @Fingercomp хоть бы пост сделал на форуме Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 31 октября, 2019 2 часа назад, hohserg сказал: При помощи ПДУ можно тестировать произвольные прошивки? Не только для дрона? Нет, к сожалению это только для дронов=) на самом деле, проще вообще так делать: local handle, data, chunk = component.proxy(component.list("internet")()).request("http://мой-ип/bios.lua"), "" while true do chunk = handle.read(math.huge) if chunk then data = data .. chunk else break end end handle.close() local chunk, err = load(data, "=stdin", "t") if not chunk and err then error(err) end success, err = xpcall(chunk, debug.traceback) if not success and err then error(err) elseif success and not err then for freq = 100, 2000, 100 do computer.beep(freq, .1) end computer.shutdown() end И редактируешь код прямо в редакторе, а еще говорил @Asior что дропбокс позволяет открывать файлы в облаке как файлы на компьютере. Так омжно даже не заморачиваться, а тупо перезагружать, и комп/дрон/мк уже скачал новую прошивку. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 1 ноября, 2019 Ну да, с облаком проще. Я отладку через гит делал. Если сделать сначала проверку версии, то будет универсальный лончер, для чего угодно. https://github.com/DOOBW/geominer/blob/master/firmware.lua Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 1 ноября, 2019 Да, можно и через дропбокс, но там придется ствить клиент себе на компьютер. Файлы можно обновлять редактируя их прямо у себя в компьютере, дропбокс в течении секунды засекает обновление и перезаливает файл. Кстати если у вас несоразмерно кривые руки что вы умудритесь запороть файл, дропбокс может его откатить на любое другое предыдущее обновление. Только единственное что, не грузите его по многу раз, иначе это будет расценено как раздача или что то типа того и дропбокс заблочит ваш адрес. Хотя у меня такого ни разу не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 1 ноября, 2019 1 минуту назад, Asior сказал: Кстати если у вас несоразмерно кривые руки что вы умудритесь запороть файл, дропбокс может его откатить на любое другое предыдущее обновление. А как можно "запороть" файл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 1 ноября, 2019 3 часа назад, eu_tomat сказал: А как можно "запороть" файл? Кодить код вне git-репозитория. 2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 197 Опубликовано: 1 ноября, 2019 В 31.10.2019 в 18:00, BrightYC сказал: computer.shutdown() Моя прошивка по идее будет быстрее работать - не нужно тратить время на запись в eeprom и перезапуск Когда нужно поменять одну строку или какую-то константу, это может быть ощутимо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 1 ноября, 2019 30 минут назад, hohserg сказал: Моя прошивка по идее будет быстрее работать - не нужно тратить время на запись в eeprom и перезапуск Когда нужно поменять одну строку или какую-то константу, это может быть ощутимо Э? computer.shutdown сделан после того, как программа завершила своё исполнение. Т.е если программа - бесконечный цикл, то компьютер никогда не выключится. Это не ощутимо - компьютер запускает программу мгновенно. Быстрее шифт+пкм по дрону/роботу, чем вводить что-то в компьютере. В eeprom программу не записывает - я просто прошиваю любой EEPROM этим кодом - и код загружается в оперативную память. Опять же повторюсь - запуск мгновенный, если файл не раздувать больше 15 килобайт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 197 Опубликовано: 2 ноября, 2019 Ок, я посмотрел внимательней твой код, он не записывает на eeprom обнову, а также, как мой просто исполняет ее, Отличие в том, что для перезалива прошивки нужно выключить-включить устройство(ну или крашнуть его) Если обнова достается по url, то это, пожалуй, удобнее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 2 ноября, 2019 В 31.10.2019 в 19:35, hohserg сказал: @Fingercomp хоть бы пост сделал на форуме Такие проги сродни hello world: их должен велосипедить и костылять каждый сам, я считаю. Выложил в репу, чтобы не потерять. Ну, ещё там интерфейс консольный поудобнее и нет ограничения в 4 киБ. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 26 июня, 2022 В 31.10.2019 в 14:14, hohserg сказал: Актуальность Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было записать прошивку на eeprom через компьютер, снять устройство, заменить eeprom через верстак поставить устройство Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки Решение Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее. Использование Загружаем файлы из этой папки(wget) https://github.com/hohserg1/OpenComputersPrograms/tree/master/wireless_flash Прошиваем наш eeprom прошивкой wireless_flash_eeporm.lua и вставляем в устройство Копируем адрес сетевой карты устройства Запускаем устройство Вызов команды wireless_flash покажет usage Последний использованный адрес сетевой карты устройства запоминается Теперь можем быстро тестировать прошивки Программа пока не особо функциональна, но вполне юзабельна. При разработке ПО для дрона рекомендую юзать планшет. Какие фичи еще стоит добавить(наверное, я это сделаю): Сохранение принятой прошивки Получение текущей прошивки устройства Сохранение множества адресов беспроводных карт круто, малодец, вот только небольшой совеи, используй _ только в ситуации когда тебе ненужна переменная, а когда нужно передать nil так и пиши nil, так как когда ты пишиш _ = 1 имя _ резервируеться, и там уде будет отнуть не nil, я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине, тоесть если ты напишиш _ = 5 print(1, _, 7) то вывод будет 1 5 7, я конечьно понимаю что за столько времени ты уже наверника с этим разобрался, но хоть навичькам помогу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 26 июня, 2022 27 минут назад, rootmaster сказал: я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине А в чём проблема конкретно этой программы? Здесь автор использует несуществующую переменную вместо nil. Да, такое решение вряд ли можно рекомендовать к широкому применению, оно требует особой бдительности от программиста. Но что может пойти не так в обсуждаемой здесь программе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 27 июня, 2022 13 часа назад, eu_tomat сказал: А в чём проблема конкретно этой программы? Здесь автор использует несуществующую переменную вместо nil. Да, такое решение вряд ли можно рекомендовать к широкому применению, оно требует особой бдительности от программиста. Но что может пойти не так в обсуждаемой здесь программе? потому что многие новички просто не понимают что _ тоже резервируется, и думают что это дырку куда можно сувать и всегда вытягивать nil я сам таким был и напоролся на эти же грабли, так что просто предупреждаю, например другая программа создаст глобал с этим именем такое ращения на мой взгляд оправдана для eeprom я так сам делаю, но тогда следует использовать разные имена для сувания и для вытягивания nil, сую я в _ в тяну из "a" а так как глобала "a" в eeprom точно не будет прога будет работать нормально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 27 июня, 2022 9 минут назад, rootmaster сказал: например другая программа создаст глобал с этим именем А как может быть запущено что-то кроме обсуждаемой программы в том же глобальном окружении? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 27 июня, 2022 52 минуты назад, eu_tomat сказал: А как может быть запущено что-то кроме обсуждаемой программы в том же глобальном окружении? например, удаленно выполненный код оставил после себя мусор, цель данного комента предостеречь новичков от подобных ошибок, если тут проблемы и не будет она может быть в другом случаи при том же подходе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 27 июня, 2022 1 минуту назад, rootmaster сказал: она может быть в другом случаи при том же подходе В каком именно случае? Изначально ты говорил про точно такую же программу: 15 часов назад, rootmaster сказал: я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 27 июня, 2022 (изменено) Только что, eu_tomat сказал: В каком именно случае? Изначально ты говорил про точно такую же программу: я имел в виду, что я давно писал программу для удаленного управления мк(примерно год назад) и использовал _ вместо nil, я тогда в первый раз писал в vs code до этого кодил в игре, и это меня спасло я увидел что _ в одном месте те светиться не так как в другом и понял в чем дело Изменено 27 июня, 2022 пользователем rootmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 197 Опубликовано: 28 июня, 2022 Я так понимаю, вопрос в том, что _ передается в аргументы функции? Типо, обычно нижнее подчеркивание юзается для цели присваивания, чтобы проигнорировать какое-то значение. Конечно, это не значит, что переменная с таким именем всегда nil(а было бы неплохо) Можно вставлять в начало своих программ че-то типо local ignoreUnderlineAssignation = { __newindex = function(self, k, v) if k~="_" then rawset(self,k,v) end end, __index = function(self, k) if k=="_" then return nil else return rawget(self,k)end end } setmetatable(_G, ignoreUnderlineAssignation) setmetatable(_ENV, ignoreUnderlineAssignation) Токо это не работает из-за странной природы _ENV. Если кто-то шарит, как работает _ENV, напишите, плиз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах