haker_fox 60 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба 40 minutes ago, haker_fox said: Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно. Ну вот, на мой взгляд, алгоритм, описанный мною, как раз позволяет вывести девайс из коматоза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба 1 час назад, haker_fox сказал: Я, всё-таки, придерживаюсь мнения, что загрузчик должен быть как можно более автономным. Т.е. он может, конечно, шить прошивку, заботливо записанную для него основным приложеним на один из носителей. Но и сам он должен уметь в случае чего перешить МК либо прошивкой, принятой по какому-либо интерфейсу (возможно нескольким), либо восстановить гарантированно рабочую, если новая не пошла, либо прошивка закончилась аварийно. А его, этот загрузчик, кто будет писать? Идеальный программист, который никогда не делает багов? Где такого собираетесь искать? ;) 8 часов назад, haker_fox сказал: А не возникнет такая ситуация: вы обновили рабочее ПО, а там - необнаруженная вовремя ошибка. И как раз загрузочная часть неработает корректно. Устройство - кирпич) Тут уже обсуждали, что достаточно добавить бэкап предыдущей прошивки и откат на неё по какому-то признаку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба 15 часов назад, Arlleex сказал: Может случиться так, что во время установки 0 в битах, если в это время пропадает питание, энергии будет не достаточно для полного обогащения затвора электронами, вследствие чего можно наблюдать эффект, когда записанный байт сегодня читается хорошо, а месяц спустя, например, некоторый бит превратится из 0 в 1. Хотя может этом уже паранойя.... Я думаю, что внутри, схема питания механизма записи, должна обеспечивать достаточное удержание питающего напряжения на ключах программирования до завершения процесса записи каждого байта. При условии обеспечения достаточной ёмкости по шине питания снаружи чипа. Ну чтоб перестраховаться, можете в самом конце прошивки завести битовое поле: каждый бит соответствует одной странице прошивки; изначально все биты в исходном состоянии; записали страницу - изменили соответствующий бит; если вдруг перезапустились, то смотрим это битовое поле - если бит в исходном состоянии, а страница - не в исходном значит считаем что обрыв питания был в процессе записи страницы - стираем её и переписываем заново. Но я просто сравниваю все страницы (как говорил ранее), смотрю: если в какой-то странице flash все биты совпадают с целевой (записываемой) прошивкой - пропускаю её. Если в странице flash есть биты находящиеся не в исходном состоянии, а в целевой прошивке они - в исходном состоянии, то стираю весь сектор flash, в котором находится такая страница (перевожу все биты в исходное состояние). Если же в странице flash есть только биты находящиеся в исходном состоянии, а в целевой прошивке они не в исходном состоянии, то просто пишу такую страницу поверх (без стирания). Вот такой смарт алгоритм :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба 2 hours ago, jcxz said: А его, этот загрузчик, кто будет писать? Идеальный программист, который никогда не делает багов? Где такого собираетесь искать? ;) Ну написать загрузчик без багов вполне можно, тем более его размер и функционал значительно меньше (как правило), чем размер и функционал основной прошивки. Ну да, риск есть. Впрочем моё мнение - лишь мнение) 2 hours ago, jcxz said: акому-то признаку. Я только не понял, по какому? Если CRC совпадает, но испорчена именно часть, отвечающая за приём и размещение прошивки? 2 hours ago, jcxz said: Вот такой смарт алгоритм :) Впечатляет! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 3 ноября, 2018 Опубликовано 3 ноября, 2018 · Жалоба 2 часа назад, haker_fox сказал: Я только не понял, по какому? Если CRC совпадает, но испорчена именно часть, отвечающая за приём и размещение прошивки? Если испорчена только эта часть, то тогда всё просто: предусматриваем в протоколе отправку сообщения устройству "Вернись на предыдущую прошивку!". И всё. А в общем случае, загрузчик должен в течение некоторого времени определить: работает ли новое ПО исправно или нет? и принимать решение.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 4 ноября, 2018 Опубликовано 4 ноября, 2018 · Жалоба 9 hours ago, jcxz said: "Вернись на предыдущую прошивку!". И всё. По известному закону в прошивке прибора будет неправильно работать и эта процедура) 9 hours ago, jcxz said: работает ли новое ПО исправно или нет? и принимать решение.... И всё-равно всё оказывается завязанным на загрузчик. Т.е. как ни крути, а он должен быть "идеальным", т.е. многократно проверен, и выполнять до банальности простую вещь: принимать и записывать любую! прошивку в МК, при запуске определять, валидная ли прошивка, и если да, то передавать ей управление. Хотя снова нюанс: если прошивка забрала управление, то загрузчик уже его может и никогда не получить. Замкнутый круг. Т.е. надо тщательно тестировать и загрузчик (тогда на него можно возложить все функции, на занимая этим основную прошивку) и саму прошивку... А если получился коллапс, то выезжать на объект... рррр! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба В 02.11.2018 в 20:29, jcxz сказал: В общем случае, при рукожопии, никакой бутлоадер не поможет. Ибо можно в ПО так накосячить, что зависнет и сторожевик не поможет. Так что от фактора рукожопости ничего не спасёт. Всё может быть. Если подходить прагматично, то нужно делать ананлиз качественных вероятностей. В моем случае мой (здесь столько слова мой не потому что я себя сильно люблю, а потому что согласен что у вас и любого другого человека ситуация может отличатся и на абсолютную истину я не претендую) аналзиз говорит что рукожопство других людей участвующих в процессе более вероятно чем мое рукожопство при написании бутлоадера. Второй фактор, жесткая оптимизация ресурсов по стоимости. Исходя из этого и было выбрано решение. А вот если бы я объясняя что партию в 10к нужно выбросить говорил бы что от любого рукожопства невозможно защитится, то скорее всего меня бы поняли превратно. Повторюсь что своё мнение не абсолютизирую, но кмк разработчик который делает качественно вполне может позволить себе запасной канал в бутлоадере. Впрочем если нет фактора оптимизации по стоимости, то я бы просто хранил три прошивки - первую эталонную, и 2 в очереди для текущих обновлений прошивок. Если такое возможо я бы пожалуй действительно отказался от загрузчика в бутлоадере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 120 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба 2 часа назад, Kabdim сказал: отказался от загрузчика в бутлоадере Это пять. Такой перл нужно читать по губам. :) Такое не каждый профессинальный журналист родить способен! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба Я чувствую движение сарказма. Собственно принимаю предложения как это сказать правильней, не растекаясь кол-вом слов по древу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба 18 minutes ago, Kabdim said: Я чувствую движение сарказма. Собственно принимаю предложения как это сказать правильней, не растекаясь кол-вом слов по древу. Полагаю, имелось ввиду "обеспечение канала связи и механизма приема/прошивки в ПО загрузчика" =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба Надо будет как-нибудь вставить в документацию для солидности. :] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgK 1 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба А два флеша поставить с аппаратным переключателем? Или это уже обсуждалось? Тогда всегда была бы наготове предыдущая версия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба Из простого вопроса "как бы мне написать загрузчик" родились DAP-контроллеры с тридцатью пятью запасными экземплярами эталонной прошивки и аппаратным рубильником. Наркомания какая-то, извините. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 ноября, 2018 Опубликовано 5 ноября, 2018 · Жалоба 33 minutes ago, esaulenka said: Из простого вопроса "как бы мне написать загрузчик" родились DAP-контроллеры с тридцатью пятью запасными экземплярами эталонной прошивки и аппаратным рубильником. Наркомания какая-то, извините. Наркомания - это юзать W7500p только из-за того что не хватило не знаю чего чтобы портировать mbed или zephyr вместо ScmRtos. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться