-
- А Вы с какой целью интересуетесь? Вообще-то разработчик не обязан отчитываться перед компилятором о своих планах. Хоть по диагонали. - Крок(23.12.2018 22:44)
- А он и не обязан. Кто-то видел, как я держал пистолет у его виска? А если по делу, оч. часто оказывается, что вопрошающий норовит изобрести велосипед, но через одно место, такшта вопрос не праздный. - SciFi(24.12.2018 08:25, картинка)
- Вот я помню, что в 8-разрябных ПИКах это было очень надо, а зачем - уже склероз. Вычисляемые переходы, таблицы и проч. - Крок(24.12.2018 08:30)
- так и у меня в 8-битном Z8Encore это везде штатно. Бутлодер в конце памяти. Перед ним - .org %383E. Я туда свободно прыгаю из основной программы, перепрошиваю нужное количество страниц и вуаля. Новая прошивка. - Лагунов(24.12.2018 08:57)
- Тогда проще бут тоже в конце расположить и при прошивке подменять адрес штатного ресета на начало бута. Тогда при старте прыгнет в бут и из него при правильной CRC программы и через пару секунд обратно на программу: правильный адрес ресета можно Andreas(234 знак., 24.12.2018 11:06)
- да мне как раз было бы понятней, если бы человек из меню шагнул в бут. Если там всё есть - прошивка (и перезапуск). Если чего-то не так - возврат. Для того и хочу узнать - как функцию бута разместить гарантировано за пределами возможной прошивки. - Лагунов(24.12.2018 12:15)
- Но при этом уж совсем любой сбой окирпичит девайс. Лучше, когда при сбое процесса прошивки или зашивки не того, можно было девайс к жизни вернуть без вскрытия. - Andreas(24.12.2018 12:35)
- ну как только стер первую страницу уже ты весь подвис. Если сбой - только вскрывать. Это ведь у кого угодно. - Лагунов(24.12.2018 13:20)
- В классическом варианте в первой странице сидит загрузчик и никогда не стирается. Для Кортекса-М0 без переноса регистра начала таблицы векторов это грустно, приходится ее в ОЗУ переправлять и прочим гимором заниматься. Кроме того надо правильно Andreas(276 знак., 24.12.2018 13:45)
- И зачем её стирать? Там должен сидеть нестираемый загрузчик, чтобы никаких кирпичей. - SciFi(24.12.2018 13:24)
- ну как только стер первую страницу уже ты весь подвис. Если сбой - только вскрывать. Это ведь у кого угодно. - Лагунов(24.12.2018 13:20)
- Делаю так же, как s_h_e говорит: сброс и анализ флагов. Из бонусов: МК после сброса в известном состоянии. Но возврата нет. Кстати, "если чего не так" без бута можно проверить. Дублирование кода в загрузчике и в основной прошивке не есть SciFi(16 знак., 24.12.2018 12:19, ссылка)
- При острой необходимости это зло решается переносом функций в загрузчик, и использованием их из приложения с помощью таблицы адресов. - VLLV(24.12.2018 12:53)
- И такое делал. Но Лагунов хвастается избытком памяти, такшта есть хороший повод его использовать :-) - SciFi(24.12.2018 12:54)
- При острой необходимости это зло решается переносом функций в загрузчик, и использованием их из приложения с помощью таблицы адресов. - VLLV(24.12.2018 12:53)
- Но при этом уж совсем любой сбой окирпичит девайс. Лучше, когда при сбое процесса прошивки или зашивки не того, можно было девайс к жизни вернуть без вскрытия. - Andreas(24.12.2018 12:35)
- да мне как раз было бы понятней, если бы человек из меню шагнул в бут. Если там всё есть - прошивка (и перезапуск). Если чего-то не так - возврат. Для того и хочу узнать - как функцию бута разместить гарантировано за пределами возможной прошивки. - Лагунов(24.12.2018 12:15)
- Тогда проще бут тоже в конце расположить и при прошивке подменять адрес штатного ресета на начало бута. Тогда при старте прыгнет в бут и из него при правильной CRC программы и через пару секунд обратно на программу: правильный адрес ресета можно Andreas(234 знак., 24.12.2018 11:06)
- так и у меня в 8-битном Z8Encore это везде штатно. Бутлодер в конце памяти. Перед ним - .org %383E. Я туда свободно прыгаю из основной программы, перепрошиваю нужное количество страниц и вуаля. Новая прошивка. - Лагунов(24.12.2018 08:57)
- Вот я помню, что в 8-разрябных ПИКах это было очень надо, а зачем - уже склероз. Вычисляемые переходы, таблицы и проч. - Крок(24.12.2018 08:30)
- А он и не обязан. Кто-то видел, как я держал пистолет у его виска? А если по делу, оч. часто оказывается, что вопрошающий норовит изобрести велосипед, но через одно место, такшта вопрос не праздный. - SciFi(24.12.2018 08:25, картинка)
- разместить там (в банке 2) бутлодер и прошивать банк 1 - Лагунов(23.12.2018 17:49)
- так не получится, если компилятор скомпилирует ваш бутлоадер заодно с обновляемой прошивкой, потроха бутлоадера окажутся с ней перемешаны и при стирании основной прошивки бутлоадер работать перестанет - AlexG(23.12.2018 18:34)
- это я чувствую, потому банке 2 будет полноценная программа бутлодера, независящая от основной программы. Макет такого бута у меня уже получился по адресу 0x08020000. В принципе надо просто скакнуть из основной программы туда в какой-то момент. :-) - Лагунов(23.12.2018 18:59)
- По-хорошему загрузчик должен быть там, где умолчальная таблица векторов. Иначе растёт риск превращения устройства в тыкву в процессе обновления. - s_h_e(23.12.2018 20:24)
- если у меня будут запрещены все прерывания, то не понадобится трогать таблицу векторов? В принципе при записи флэш (беря байты из ОЗУ или к примеру из SPI EEPROM) прерывания мне и не нужны. - Лагунов(24.12.2018 08:59)
- С одной стороны - да, вектора не нужны. А с другой стороны, как прошивка окажется в ОЗУ или в еепром? приложение закачает? а если оно битое? - VLLV(24.12.2018 09:06)
- вот сейчас как раз пробую скачать файл из USB disk, полностью его проверяю, сохраняю в SPI EEPROM (может еще и дублирую, место есть). До этого момента пользуюсь всеми ресурсами старой прошивки. После того, как всё идеально, запрещаю все Лагунов(140 знак., 24.12.2018 12:21)
- 1) Произойдет сбой питания во время прошивки. 2) Второпях во время очередных коррекций приложения произошла ошибка, не позволяющая подготовить данные. - VLLV(24.12.2018 12:48)
- так масса перепрошиваемых устройств всегда про это (отключение питания) верещат, предупреждают. Тут уж как не повезет. - Лагунов(24.12.2018 13:22)
- 1) Произойдет сбой питания во время прошивки. 2) Второпях во время очередных коррекций приложения произошла ошибка, не позволяющая подготовить данные. - VLLV(24.12.2018 12:48)
- вот сейчас как раз пробую скачать файл из USB disk, полностью его проверяю, сохраняю в SPI EEPROM (может еще и дублирую, место есть). До этого момента пользуюсь всеми ресурсами старой прошивки. После того, как всё идеально, запрещаю все Лагунов(140 знак., 24.12.2018 12:21)
- С одной стороны - да, вектора не нужны. А с другой стороны, как прошивка окажется в ОЗУ или в еепром? приложение закачает? а если оно битое? - VLLV(24.12.2018 09:06)
- Ежели поциент не просчитал риски превращения в кирпич, так поциенту и надо. - SciFi(23.12.2018 20:28)
- если у меня будут запрещены все прерывания, то не понадобится трогать таблицу векторов? В принципе при записи флэш (беря байты из ОЗУ или к примеру из SPI EEPROM) прерывания мне и не нужны. - Лагунов(24.12.2018 08:59)
- и что, полноценная программа загрузки получилась без вложеных функций? - VLLV(23.12.2018 20:15)
- да нет конечно, это так - теоретически. :-). - Лагунов(23.12.2018 20:21)
- По-хорошему загрузчик должен быть там, где умолчальная таблица векторов. Иначе растёт риск превращения устройства в тыкву в процессе обновления. - s_h_e(23.12.2018 20:24)
- это я чувствую, потому банке 2 будет полноценная программа бутлодера, независящая от основной программы. Макет такого бута у меня уже получился по адресу 0x08020000. В принципе надо просто скакнуть из основной программы туда в какой-то момент. :-) - Лагунов(23.12.2018 18:59)
- а вы уверены что смогете что либо записать (не затерев всю флеш) в 1 банк при залоченном проце ?? - Aleksey_75(23.12.2018 18:22)
- да пока в своих поделках ничего не залочивал. :-) Так-то флэш пописывал помаленьку (константы), стирая страницы. - Лагунов(23.12.2018 18:33)
- Это не так делается. Нужно 2 прошивки: загрузчик и основная программа. - SciFi(23.12.2018 17:54)
- Да, это самый правильный вариант. Бутлоадер размещается в памяти FLASH с нулевым смещением, основная прошивка размещается в памяти со смещением. evgeniy1294(666 знак., 23.12.2018 18:12 - 18:20)
- и как это переключать? Необходимо из меню устройства перейти в загрузчик, считать с флэшки новую прошивку, прошить и перезапуститься. Или тут подразумевается при каждом включении проверять наличие флэшки с обновлением? - Лагунов(23.12.2018 18:26)
- Например проверить прошивку на флешке, записать куда-нибудь флаг для загрузчика, перезапуститься. Загрузчик сам читает прошивку и обновляет. Как-то так. - s_h_e(23.12.2018 18:30)
- да, вариант. Надо смотреть. Спасибо. - Лагунов(23.12.2018 18:31)
- Например проверить прошивку на флешке, записать куда-нибудь флаг для загрузчика, перезапуститься. Загрузчик сам читает прошивку и обновляет. Как-то так. - s_h_e(23.12.2018 18:30)
- и как это переключать? Необходимо из меню устройства перейти в загрузчик, считать с флэшки новую прошивку, прошить и перезапуститься. Или тут подразумевается при каждом включении проверять наличие флэшки с обновлением? - Лагунов(23.12.2018 18:26)
- Да, это самый правильный вариант. Бутлоадер размещается в памяти FLASH с нулевым смещением, основная прошивка размещается в памяти со смещением. evgeniy1294(666 знак., 23.12.2018 18:12 - 18:20)
- так не получится, если компилятор скомпилирует ваш бутлоадер заодно с обновляемой прошивкой, потроха бутлоадера окажутся с ней перемешаны и при стирании основной прошивки бутлоадер работать перестанет - AlexG(23.12.2018 18:34)
- А Вы с какой целью интересуетесь? Вообще-то разработчик не обязан отчитываться перед компилятором о своих планах. Хоть по диагонали. - Крок(23.12.2018 22:44)