|
|
  |
STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку |
|
|
|
May 21 2014, 11:29
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(_Артём_ @ May 21 2014, 09:58)  Маловероятно... Ну.. Если так программировать.. Программирование должно быть детерминистик как возможно. В общем, с ресетом больше граблей, дольше и выгоды не вижу. Проще прыгнуть сразу, без всяких вероятностей
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 11:33
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(A. Fig Lee @ May 21 2014, 19:39)  Ну.. Если так программировать.. Программирование должно быть детерминистик как возможно. Согласен - не дело это. Хотя и каких-то нежелательных эффектов тоже сразу не видно. Хотя наверное можно придумать. Цитата(A. Fig Lee @ May 21 2014, 19:39)  В общем, с ресетом больше граблей, дольше и выгоды не вижу. Проще прыгнуть сразу, без всяких вероятностей Согласен, так и лучше и проще.
|
|
|
|
|
May 21 2014, 14:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Golikov A. @ May 21 2014, 20:21)  получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно... Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2014, 14:58
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(Сергей Борщ @ May 21 2014, 13:42)  Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным. А зачем "сброс собакой"? Что, без сброса чтото изменится? В любом случае все теже самые регистры задействованы записи/чтения флаша. Залил, проверил и прыгнул. Тогда и уходить никуда не надо.. Цитата(scifi @ May 21 2014, 14:06)  Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ. Случайные совпадения в ОЗУ могут быть всегда.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 21 2014, 18:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(A. Fig Lee @ May 21 2014, 22:26)  2 никому не нужных движения: ресет Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2014, 21:03
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(Сергей Борщ @ May 21 2014, 18:07)  Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина. А.. А я в бутлоадере не пользую АЦП и тому подобное. Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. А! Собака! Вот оно где порылось. Вотчдог - зло, его использовать плохая привычка. Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, чтото не так.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
May 22 2014, 01:46
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(A. Fig Lee @ May 22 2014, 04:13)  А.. А я в бутлоадере не пользую АЦП и тому подобное. А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? Цитата(A. Fig Lee @ May 22 2014, 04:13)  Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Цитата(A. Fig Lee @ May 22 2014, 04:13)  Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, что-то не так. Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 22 2014, 06:52
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(Сергей Борщ @ May 22 2014, 00:56)  А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Нет. Есть комманда, по ней делается програмный ресет. И по ресету мы в бутлоадере. Если кнопка не была нажата при ресете, опять уходим в главную программу. Цитата(Сергей Борщ @ May 22 2014, 00:56)  Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему. Дык - програмный ресет, ничего не надо затыкать. А вот перед прыжком в программу USB затыкаем. И надо в главной программе explicitly сделать __enable_interrupt() Все, больше телодвижений не надо. Для таймаутов пользуюсь таймером обычным. Но в данном случае его не пользую. Таймаут это фактически "флэшу кирдык", а значит, микросхеме и устройству. Нет смысла обрабатывать такую ситуацию. Везите к нам. Будем разбиратся. Цитата(Golikov A. @ May 22 2014, 00:58)  Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа. Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО Правильно. Но в приложение не обязательно
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|