реклама на сайте
подробности

 
 
6 страниц V  « < 2 3 4 5 6 >  
Reply to this topicStart new topic
> STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку
A. Fig Lee
сообщение May 21 2014, 11:29
Сообщение #46


Знающий
****

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



Цитата(_Артём_ @ May 21 2014, 09:58) *
Маловероятно...

Ну.. Если так программировать..
Программирование должно быть детерминистик как возможно.
В общем, с ресетом больше граблей, дольше и выгоды не вижу.
Проще прыгнуть сразу, без всяких вероятностей


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 21 2014, 11:33
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(A. Fig Lee @ May 21 2014, 19:39) *
Ну.. Если так программировать..
Программирование должно быть детерминистик как возможно.

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

Цитата(A. Fig Lee @ May 21 2014, 19:39) *
В общем, с ресетом больше граблей, дольше и выгоды не вижу.
Проще прыгнуть сразу, без всяких вероятностей

Согласен, так и лучше и проще.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 21 2014, 13:11
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 21 2014, 14:32
Сообщение #49


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 21 2014, 14:53
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Сбрасывать собакой - чтобы сброс был железным?
Если любой программный сброс - уход в загрузчик, то для удаленной перезагрузки устройства тоже делать фокус с вачдогом?
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 14:56
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(A. Fig Lee @ May 21 2014, 18:53) *
В любом случае, как обслуживать ситуацию,
когда в данной ячейке при холодном старте флаг случайно совпал с тем, который выставляется
для прыгания в главную программу?

Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 14:58
Сообщение #52


Знающий
****

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



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

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

Цитата(scifi @ May 21 2014, 14:06) *
Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ.

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


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 15:01
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(A. Fig Lee @ May 21 2014, 23:08) *
Случайные совпадения в ОЗУ могут быть всегда.

Как страшно жыть... Так никакая программа работать не сможет :-)
Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 15:16
Сообщение #54


Знающий
****

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



Цитата(scifi @ May 21 2014, 14:11) *
Как страшно жыть... Так никакая программа работать не сможет :-)
Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца.

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


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 21 2014, 18:57
Сообщение #55


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 21 2014, 21:03
Сообщение #56


Знающий
****

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



Цитата(Сергей Борщ @ May 21 2014, 18:07) *
Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина.


А.. А я в бутлоадере не пользую АЦП и тому подобное.
Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все.

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



--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 22 2014, 01:46
Сообщение #57


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 22 2014, 01:48
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа.
Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 22 2014, 01:53
Сообщение #59


Гуру
******

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



Цитата(Golikov A. @ May 22 2014, 08:58) *
Надо в загрузчик переходить с чистого листа.
Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что
Именно. Тем более что реализуется это гораздо проще, чем все остальные пути.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 22 2014, 06:52
Сообщение #60


Знающий
****

Группа: Участник
Сообщений: 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) *
Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа.
Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО

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


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

6 страниц V  « < 2 3 4 5 6 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016