A. Fig Lee 0 Posted May 21, 2014 · Report post Маловероятно... Ну.. Если так программировать.. Программирование должно быть детерминистик как возможно. В общем, с ресетом больше граблей, дольше и выгоды не вижу. Проще прыгнуть сразу, без всяких вероятностей Quote Ответить с цитированием Share this post Link to post Share on other sites
Артём__ 0 Posted May 21, 2014 · Report post Ну.. Если так программировать.. Программирование должно быть детерминистик как возможно. Согласен - не дело это. Хотя и каких-то нежелательных эффектов тоже сразу не видно. Хотя наверное можно придумать. В общем, с ресетом больше граблей, дольше и выгоды не вижу. Проще прыгнуть сразу, без всяких вероятностей Согласен, так и лучше и проще. Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted May 21, 2014 · Report post а мне понравилась идея) у меня сейчас запуск в бутлоадер проверка флага в еепром, переход в бут или в основную программу... получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно... Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted May 21, 2014 · Report post получается я могу сделать флаг в RAM, и переходить через ресет на бут если в флаге стоит кодовое слово, иначе уходить в основную прогу. И оставить EEPROM в покое, интересно...Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным. Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted May 21, 2014 · Report post Сбрасывать собакой - чтобы сброс был железным? Если любой программный сброс - уход в загрузчик, то для удаленной перезагрузки устройства тоже делать фокус с вачдогом? Quote Ответить с цитированием Share this post Link to post Share on other sites
scifi 0 Posted May 21, 2014 · Report post В любом случае, как обслуживать ситуацию, когда в данной ячейке при холодном старте флаг случайно совпал с тем, который выставляется для прыгания в главную программу? Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ. Quote Ответить с цитированием Share this post Link to post Share on other sites
A. Fig Lee 0 Posted May 21, 2014 · Report post Не плодите сущностей. Вы сбрасываться как собираетесть? Программно? Вот и проверяйте флаг программного сброса в соответствующем регистре ядра. И не нужно ни EEPROM, ни ячейки в ОЗУ резервировать. А еще лучше сбрасываться после прошивки собакой и по отсутствию флага программного сброса делать проверку целостности прошивки и прыжок в нее. А по флагу программного сброса или при ошибке целостности уходить в загрузчик. Тогда вы получите возможность запуска загрузчика из основной программы программным сбросом и загрузчик при этом будет запускаться тоже со сброшенной периферией. Я делаю именно так и нахожу это очень простым и удобным. А зачем "сброс собакой"? Что, без сброса чтото изменится? В любом случае все теже самые регистры задействованы записи/чтения флаша. Залил, проверил и прыгнул. Тогда и уходить никуда не надо.. Нужно пользоваться регистром, который показывает причину сброса. Можно совместно с ячейкой ОЗУ (и никаких случайных совпадений там уже быть не может), а можно и без неё, как отметил Сергей Борщ. Случайные совпадения в ОЗУ могут быть всегда. Quote Ответить с цитированием Share this post Link to post Share on other sites
scifi 0 Posted May 21, 2014 · Report post Случайные совпадения в ОЗУ могут быть всегда. Как страшно жыть... Так никакая программа работать не сможет :-) Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца. Quote Ответить с цитированием Share this post Link to post Share on other sites
A. Fig Lee 0 Posted May 21, 2014 · Report post Как страшно жыть... Так никакая программа работать не сможет :-) Случайные совпадения в моей схеме исключены. Вы просто не разобрались до конца. Почему не разобрался? 2 никому не нужных движения: ресет и использование РАМ Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted May 21, 2014 · Report post 2 никому не нужных движения: ресетВам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина. Quote Ответить с цитированием Share this post Link to post Share on other sites
A. Fig Lee 0 Posted May 21, 2014 · Report post Вам не нужны - не используйте. А я одним легким движением уверен, что у меня не продолжает молотить АЦП загаживая по DMA уже не свою память, мне не нужно затыкать таймера, генерящие прерывания с несуществующими в загрузчике обработчиками, что однократно запускаемая в LPC2xxx собака и в загрузчике и в приложении работает с разными настройками. Вы же можете все эти действия проводить вручную и на очередной версии приложения вдруг обнаружить, что не можете обновить прошивку потому что когда-то давно проектируя загрузчик, забыли заткнуть какую-то не использовавшуюся тогда периферию, а теперь, в новой версии, эта периферия мешает работать загрузчику. Пожалуйста! Каждый сам себе злобный Буратина. А.. А я в бутлоадере не пользую АЦП и тому подобное. Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. А! Собака! Вот оно где порылось. Вотчдог - зло, его использовать плохая привычка. Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, чтото не так. Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted May 22, 2014 · Report post А.. А я в бутлоадере не пользую АЦП и тому подобное.А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? Канал для записи во флеш и обмена данными - один из USB/RS232 и так далее... Все. И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Тем более в бутлоадере. Он должен быть прост и бронебоен. Если там нужен вотчдог, что-то не так.Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему. Quote Ответить с цитированием Share this post Link to post Share on other sites
Golikov 0 Posted May 22, 2014 · Report post Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа. Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО Quote Ответить с цитированием Share this post Link to post Share on other sites
Сергей Борщ 0 Posted May 22, 2014 · Report post Надо в загрузчик переходить с чистого листа. Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что Именно. Тем более что реализуется это гораздо проще, чем все остальные пути. Quote Ответить с цитированием Share this post Link to post Share on other sites
A. Fig Lee 0 Posted May 22, 2014 · Report post А для обновления прошивки вам нужно вручную выключить и включить устройство, или все же предусмотрена возможность запуска загрузчика по команде работающему приложению? Нет. Есть комманда, по ней делается програмный ресет. И по ресету мы в бутлоадере. Если кнопка не была нажата при ресете, опять уходим в главную программу. Если предусмотрена - то где и как вы затыкаете периферию, которую перед запуском загрузчика использовало приложение? И их затыкать после окончания перепрошивки перед запуском приложения тоже не нужно? Использование собаки для отслеживания таймаута в загрузчике - исключительно простое и бронебойное решение. Но вы можете строить свой велосипед по-своему. Дык - програмный ресет, ничего не надо затыкать. А вот перед прыжком в программу USB затыкаем. И надо в главной программе explicitly сделать __enable_interrupt() Все, больше телодвижений не надо. Для таймаутов пользуюсь таймером обычным. Но в данном случае его не пользую. Таймаут это фактически "флэшу кирдык", а значит, микросхеме и устройству. Нет смысла обрабатывать такую ситуацию. Везите к нам. Будем разбиратся. Все же переход в загрузчик из основного приложения прыжком - реально зло... Надо в загрузчик переходить с чистого листа. Так же и в приложение хорошо бы перейти с чистого листа, ну мало ли что... мое ИМХО Правильно. Но в приложение не обязательно Quote Ответить с цитированием Share this post Link to post Share on other sites