Перейти к содержанию
    

обновление прошивки через эзернет-чо требуется.

Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно.

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


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

40 minutes ago, haker_fox said:

Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно.

Ну вот, на мой взгляд, алгоритм, описанный мною, как раз позволяет вывести девайс из коматоза.

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


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

1 час назад, haker_fox сказал:

Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно.

А его, этот загрузчик, кто будет писать? Идеальный программист, который никогда не делает багов? Где такого собираетесь искать?  ;)

8 часов назад, haker_fox сказал:

А не возникнет такая ситуация: вы обновили рабочее ПО, а там - необнаруженная вовремя ошибка. И как раз загрузочная часть неработает корректно. Устройство - кирпич)

Тут уже обсуждали, что достаточно добавить бэкап предыдущей прошивки и откат на неё по какому-то признаку.

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


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

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

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

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

При условии обеспечения достаточной ёмкости по шине питания снаружи чипа.

Ну чтоб перестраховаться, можете в самом конце прошивки завести битовое поле: каждый бит соответствует одной странице прошивки; изначально все биты в исходном состоянии; записали страницу - изменили соответствующий бит; если вдруг перезапустились, то смотрим это битовое поле - если бит в исходном состоянии, а страница - не в исходном значит считаем что обрыв питания был в процессе записи страницы - стираем её и переписываем заново.

Но я просто сравниваю все страницы (как говорил ранее), смотрю: если в какой-то странице flash все биты совпадают с целевой (записываемой) прошивкой - пропускаю её. Если в странице flash есть биты находящиеся не в исходном состоянии, а в целевой прошивке они - в исходном состоянии, то стираю весь сектор flash, в котором находится такая страница (перевожу все биты в исходное состояние). Если же в странице flash есть только биты находящиеся в исходном состоянии, а в целевой прошивке они не в исходном состоянии, то просто пишу такую страницу поверх (без стирания).

Вот такой смарт алгоритм  :)

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


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

2 hours ago, jcxz said:

А его, этот загрузчик, кто будет писать? Идеальный программист, который никогда не делает багов? Где такого собираетесь искать?  ;)

Ну написать загрузчик без багов вполне можно, тем более его размер и функционал значительно меньше (как правило), чем размер и функционал основной прошивки. Ну да, риск есть. Впрочем моё мнение - лишь мнение)

2 hours ago, jcxz said:

акому-то признаку.

Я только не понял, по какому? Если CRC совпадает, но испорчена именно часть, отвечающая за приём и размещение прошивки?

2 hours ago, jcxz said:

Вот такой смарт алгоритм  :)

Впечатляет!

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


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

2 часа назад, haker_fox сказал:

Я только не понял, по какому? Если CRC совпадает, но испорчена именно часть, отвечающая за приём и размещение прошивки?

Если испорчена только эта часть, то тогда всё просто: предусматриваем в протоколе отправку сообщения устройству "Вернись на предыдущую прошивку!". И всё.

А в общем случае, загрузчик должен в течение некоторого времени определить: работает ли новое ПО исправно или нет? и принимать решение....

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


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

9 hours ago, jcxz said:

"Вернись на предыдущую прошивку!". И всё.

По известному закону в прошивке прибора будет неправильно работать и эта процедура)

9 hours ago, jcxz said:

работает ли новое ПО исправно или нет? и принимать решение....

И всё-равно всё оказывается завязанным на загрузчик. Т.е. как ни крути, а он должен быть "идеальным", т.е. многократно проверен, и выполнять до банальности простую вещь: принимать и записывать любую! прошивку в МК, при запуске определять, валидная ли прошивка, и если да, то передавать ей управление. Хотя снова нюанс: если прошивка забрала управление, то загрузчик уже его может и никогда не получить. Замкнутый круг. Т.е. надо тщательно тестировать и загрузчик (тогда на него можно возложить все функции, на занимая этим основную прошивку) и саму прошивку... А если получился коллапс, то выезжать на объект... рррр!

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


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

В 02.11.2018 в 20:29, jcxz сказал:

В общем случае, при рукожопии, никакой бутлоадер не поможет. Ибо можно в ПО так накосячить, что зависнет и сторожевик не поможет. Так что от фактора рукожопости ничего не спасёт.

Всё может быть. Если подходить прагматично, то нужно делать ананлиз качественных вероятностей. В моем случае мой (здесь столько слова мой не потому что я себя сильно люблю, а потому что согласен что у вас и любого другого человека ситуация может отличатся и на абсолютную истину я не претендую) аналзиз говорит что рукожопство других людей участвующих в процессе более вероятно чем мое рукожопство при написании бутлоадера. Второй фактор, жесткая оптимизация ресурсов по стоимости. Исходя из этого и было выбрано решение.

 

А вот если бы я объясняя что партию в 10к нужно выбросить говорил бы что от любого рукожопства невозможно защитится, то скорее всего меня бы поняли превратно.

 

Повторюсь что своё мнение не абсолютизирую, но кмк разработчик который делает качественно вполне может позволить себе запасной канал в бутлоадере. Впрочем если нет фактора оптимизации по стоимости, то я бы просто хранил три прошивки - первую эталонную, и 2 в очереди для текущих обновлений прошивок. Если такое возможо я бы пожалуй действительно отказался от загрузчика в бутлоадере.

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


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

2 часа назад, Kabdim сказал:

отказался от загрузчика в бутлоадере

Это пять. Такой перл нужно читать по губам. :) Такое не каждый профессинальный журналист родить способен!

 

 

 

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


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

Я чувствую движение сарказма. Собственно принимаю предложения как это сказать правильней, не растекаясь кол-вом слов по древу.

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


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

18 minutes ago, Kabdim said:

Я чувствую движение сарказма. Собственно принимаю предложения как это сказать правильней, не растекаясь кол-вом слов по древу.

Полагаю, имелось ввиду "обеспечение канала связи и механизма приема/прошивки в ПО загрузчика" =)

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


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

А два флеша поставить с аппаратным переключателем? Или это уже обсуждалось? Тогда всегда была бы наготове предыдущая версия.

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


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

Из простого вопроса "как бы мне написать загрузчик" родились DAP-контроллеры с тридцатью пятью запасными экземплярами эталонной прошивки и аппаратным рубильником.

Наркомания какая-то, извините.

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


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

33 minutes ago, esaulenka said:

Из простого вопроса "как бы мне написать загрузчик" родились DAP-контроллеры с тридцатью пятью запасными экземплярами эталонной прошивки и аппаратным рубильником.

Наркомания какая-то, извините.

Наркомания - это юзать W7500p только из-за того что не хватило не знаю чего  чтобы портировать mbed или zephyr вместо ScmRtos.

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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