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

STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку

Маловероятно...

Ну.. Если так программировать..

Программирование должно быть детерминистик как возможно.

В общем, с ресетом больше граблей, дольше и выгоды не вижу.

Проще прыгнуть сразу, без всяких вероятностей

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


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

Ну.. Если так программировать..

Программирование должно быть детерминистик как возможно.

Согласен - не дело это. Хотя и каких-то нежелательных эффектов тоже сразу не видно. Хотя наверное можно придумать.

 

В общем, с ресетом больше граблей, дольше и выгоды не вижу.

Проще прыгнуть сразу, без всяких вероятностей

Согласен, так и лучше и проще.

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


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

а мне понравилась идея)

 

у меня сейчас

запуск в бутлоадер проверка флага в еепром, переход в бут или в основную программу...

 

получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно...

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


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

получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно...
Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией.

Я делаю именно так и нахожу это очень простым и удобным.

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


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

Сбрасывать собакой - чтобы сброс был железным?

Если любой программный сброс - уход в загрузчик, то для удаленной перезагрузки устройства тоже делать фокус с вачдогом?

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


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

В любом случае, как обслуживать ситуацию,

когда в данной ячейке при холодном старте флаг случайно совпал с тем, который выставляется

для прыгания в главную программу?

Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ.

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


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

Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией.

Я делаю именно так и нахожу это очень простым и удобным.

А зачем "сброс собакой"? Что, без сброса чтото изменится? В любом случае все теже самые регистры задействованы записи/чтения флаша.

Залил, проверил и прыгнул.

Тогда и уходить никуда не надо..

 

Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ.

Случайные совпадения в ОЗУ могут быть всегда.

 

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


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

Случайные совпадения в ОЗУ могут быть всегда.

Как страшно жыть... Так никакая программа работать не сможет :-)

Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца.

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


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

Как страшно жыть... Так никакая программа работать не сможет :-)

Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца.

Почему не разобрался? 2 никому не нужных движения: ресет и использование РАМ

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


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

2 никому не нужных движения: ресет
Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина.

 

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


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

Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина.

 

А.. А я в бутлоадере не пользую АЦП и тому подобное.

Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все.

 

А! Собака! Вот оно где порылось. Вотчдог - зло, его использовать плохая привычка.

Тем более в бутлоадере. Он должен быть прост и бронебоен.

Если там нужен вотчдог, чтото не так.

 

 

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


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

А.. А я в бутлоадере не пользую АЦП и тому подобное.
А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение?

Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все.
И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно?

Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, что-то не так.
Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему.

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


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

Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа.

Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО

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


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

Надо в загрузчик переходить с чистого листа.

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

Именно. Тем более что реализуется это гораздо проще, чем все остальные пути.

 

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


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

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

Нет. Есть комманда, по ней делается програмный ресет.

И по ресету мы в бутлоадере. Если кнопка не была нажата при ресете, опять уходим в главную программу.

 

Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение?

И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно?

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

Дык - програмный ресет, ничего не надо затыкать.

А вот перед прыжком в программу USB затыкаем.

И надо в главной программе explicitly сделать __enable_interrupt()

Все, больше телодвижений не надо.

 

Для таймаутов пользуюсь таймером обычным. Но в данном случае его не пользую.

Таймаут это фактически "флэшу кирдык", а значит, микросхеме и устройству.

Нет смысла обрабатывать такую ситуацию.

Везите к нам. Будем разбиратся.

 

 

Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа.

Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО

Правильно. Но в приложение не обязательно

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


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

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

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

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

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

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

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

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

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

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