Перейти к содержимому
hohserg

Wireless flash - заливаем прошивки eeprom удаленно

Рекомендуемые сообщения

Актуальность

Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было

  • записать прошивку на eeprom через компьютер,
  • снять устройство,
  • заменить eeprom через верстак
  • поставить устройство

Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки

 

Решение

Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее.

 

Использование

  • Загружаем файлы из этой папки(wget)

https://github.com/hohserg1/OpenComputersPrograms/tree/master/wireless_flash

  • Прошиваем наш eeprom прошивкой wireless_flash_eeporm.lua и вставляем в устройство
  • Копируем адрес сетевой карты устройства
  • Запускаем устройство
  • Вызов команды wireless_flash покажет usage

Последний использованный адрес сетевой карты устройства запоминается

Теперь можем быстро тестировать прошивки:lol:

 

 

Программа пока не особо функциональна, но вполне юзабельна.

При разработке ПО для дрона рекомендую юзать планшет.

 

Какие фичи еще стоит добавить(наверное, я это сделаю):

  • Сохранение принятой прошивки
  • Получение текущей прошивки устройства
  • Сохранение множества адресов беспроводных карт

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
42 минуты назад, hohserg сказал:

Актуальность

Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было

  • записать прошивку на eeprom через компьютер,
  • снять устройство,
  • заменить eeprom через верстак
  • поставить устройство

Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки

 

Решение

Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее.


А можно использовать мою программу. Там есть и возврат ошибок, так же там есть интерпретатор(можно вживую, как на компьютере, протестировать какую-то вещь). Там и есть загрузка файлов, и так же можно при желании даже перепрошить дрона=)

 

UPD: А у @Fingercomp эта штука в openprograms уже висит 3 года https://github.com/OpenPrograms/Fingercomp-Programs/tree/master/net-flash

Изменено пользователем BrightYC

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При помощи ПДУ можно тестировать произвольные прошивки? Не только для дрона?

 

37 минут назад, BrightYC сказал:

в openprograms уже висит 3 года

@Fingercomp хоть бы пост сделал на форуме

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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 что дропбокс позволяет открывать файлы в облаке как файлы на компьютере. Так омжно даже не заморачиваться, а тупо перезагружать, и комп/дрон/мк уже скачал новую прошивку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да, с облаком проще. Я отладку через гит делал. Если сделать сначала проверку версии, то будет универсальный лончер, для чего угодно.

https://github.com/DOOBW/geominer/blob/master/firmware.lua

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, можно и через дропбокс, но там придется ствить клиент себе на компьютер. Файлы можно обновлять редактируя их прямо у себя в компьютере, дропбокс в течении секунды засекает обновление и перезаливает файл. Кстати если у вас несоразмерно кривые руки что вы умудритесь запороть файл, дропбокс может его откатить на любое другое предыдущее обновление. Только единственное что, не грузите его по многу раз, иначе это будет расценено как раздача или что то типа того и дропбокс заблочит ваш адрес. Хотя у меня такого ни разу не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Asior сказал:

Кстати если у вас несоразмерно кривые руки что вы умудритесь запороть файл, дропбокс может его откатить на любое другое предыдущее обновление.

А как можно "запороть" файл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, eu_tomat сказал:

А как можно "запороть" файл?

Кодить код вне git-репозитория.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 31.10.2019 в 18:00, BrightYC сказал:

computer.shutdown()

Моя прошивка по идее будет быстрее работать - не нужно тратить время на запись в eeprom и перезапуск

 

Когда нужно поменять одну строку или какую-то константу, это может быть ощутимо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
30 минут назад, hohserg сказал:

Моя прошивка по идее будет быстрее работать - не нужно тратить время на запись в eeprom и перезапуск

 

Когда нужно поменять одну строку или какую-то константу, это может быть ощутимо

Э? computer.shutdown сделан после того, как программа завершила своё исполнение. Т.е если программа - бесконечный цикл, то компьютер никогда не выключится. Это не ощутимо - компьютер запускает программу мгновенно. Быстрее шифт+пкм по дрону/роботу, чем вводить что-то в компьютере. 

В eeprom программу не записывает - я просто прошиваю любой EEPROM этим кодом - и код загружается в оперативную память. Опять же повторюсь - запуск мгновенный, если файл не раздувать больше 15 килобайт. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ок, я посмотрел внимательней твой код, он не записывает на eeprom обнову, а также, как мой просто исполняет ее, Отличие в том, что для перезалива прошивки нужно выключить-включить устройство(ну или крашнуть его) Если обнова достается по url, то это, пожалуй, удобнее

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 31.10.2019 в 19:35, hohserg сказал:

@Fingercomp хоть бы пост сделал на форуме

Такие проги сродни hello world: их должен велосипедить и костылять каждый сам, я считаю. Выложил в репу, чтобы не потерять. Ну, ещё там интерфейс консольный поудобнее и нет ограничения в 4 киБ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 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

Последний использованный адрес сетевой карты устройства запоминается

Теперь можем быстро тестировать прошивки:lol:

 

 

Программа пока не особо функциональна, но вполне юзабельна.

При разработке ПО для дрона рекомендую юзать планшет.

 

Какие фичи еще стоит добавить(наверное, я это сделаю):

  • Сохранение принятой прошивки
  • Получение текущей прошивки устройства
  • Сохранение множества адресов беспроводных карт

круто, малодец, вот только небольшой совеи, используй _ только в ситуации когда тебе ненужна переменная, а когда нужно передать nil так и пиши nil, так как когда ты пишиш _ = 1 имя _ резервируеться, и там уде будет отнуть не nil, я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине, тоесть если ты напишиш _ = 5 print(1, _, 7) то вывод будет 1 5 7, я конечьно понимаю что за столько времени ты уже наверника с этим разобрался, но хоть навичькам помогу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
27 минут назад, rootmaster сказал:

я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине

А в чём проблема конкретно этой программы? Здесь автор использует несуществующую переменную вместо nil. Да, такое решение вряд ли можно рекомендовать к широкому применению, оно требует особой бдительности от программиста. Но что может пойти не так в обсуждаемой здесь программе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, eu_tomat сказал:

А в чём проблема конкретно этой программы? Здесь автор использует несуществующую переменную вместо nil. Да, такое решение вряд ли можно рекомендовать к широкому применению, оно требует особой бдительности от программиста. Но что может пойти не так в обсуждаемой здесь программе?

потому что многие новички просто не понимают что _ тоже резервируется, и думают что это дырку куда можно сувать и всегда вытягивать nil я сам таким был и напоролся на эти же грабли, так что просто предупреждаю, например другая программа создаст глобал с этим именем

 

такое ращения на мой взгляд оправдана для eeprom я так сам делаю, но тогда следует использовать разные имена для сувания и для вытягивания nil, сую я в _ в тяну из "a" а так как глобала "a" в eeprom точно не будет прога будет работать нормально

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, rootmaster сказал:

например другая программа создаст глобал с этим именем

А как может быть запущено что-то кроме обсуждаемой программы в том же глобальном окружении?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
52 минуты назад, eu_tomat сказал:

А как может быть запущено что-то кроме обсуждаемой программы в том же глобальном окружении?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, rootmaster сказал:

она может быть в другом случаи при том же подходе

В каком именно случае? Изначально ты говорил про точно такую же программу:

15 часов назад, rootmaster сказал:

я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

В каком именно случае? Изначально ты говорил про точно такую же программу:

 

я имел в виду, что я давно писал программу для удаленного управления мк(примерно год назад) и использовал _ вместо nil, я тогда в первый раз писал в vs code до этого кодил в игре, и это меня спасло я увидел что _ в одном месте те светиться не так как в другом и понял в чем дело

Изменено пользователем rootmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю, вопрос в том, что _ передается в аргументы функции?

Типо, обычно нижнее подчеркивание юзается для цели присваивания, чтобы проигнорировать какое-то значение. Конечно, это не значит, что переменная с таким именем всегда 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, напишите, плиз

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...