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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Размещение переменой по заданному адресу и ее значение после ресета
HardEgor
сообщение Aug 5 2017, 19:06
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(turnon @ Aug 5 2017, 17:25) *
Потребление RTC - 5 uA. Если питание пропадет на сутки, чтобы RTC не сбросился.....

Какие сутки? Вы же писали про ресеты, а не выключение питания.
Если всё-таки выключение питания, то либо ставить батарейку, либо писать надо во флеш.
Go to the top of the page
 
+Quote Post
turnon
сообщение Aug 5 2017, 21:24
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207



Цитата(jcxz @ Aug 5 2017, 13:30) *
А зачем нужно это инкрементирование переменной? Возможно есть решения получше, которые Вы не замечаете.

Как флаг для бутлоадера. В обычном режиме работы бутлоадер сразу запускает основную прошивку, а если есть флаг - то ожидает загрузки новой прошивки по USB.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 6 2017, 08:08
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(turnon @ Aug 6 2017, 00:24) *
Как флаг для бутлоадера. В обычном режиме работы бутлоадер сразу запускает основную прошивку, а если есть флаг - то ожидает загрузки новой прошивки по USB.

Как я и думал.... laughing.gif
Вы смотрите совсем не туда. __no_init тут не нужен. Как не нужен и инкремент. __no_init для этого адреса должно быть в бутлоадере.
Общий алгоритм таков:
В бутлоадере объявляете этот адрес:
__no_init char flag @ ...;
при старте бутлоадера проверяете сначала флаг причины перезагрузки МК (искать где он нужно в даташите), если сброс был не по причине внутреннего WDT - передаёте управление в основную прогу. Если причина == внутренний WDT и flag != 0 - прошиваете прошивку и flag = 0.
В основной программе объявляете:
char flag @ ...;
А когда нужно обновить прошивку делаете flag = 1 и вызываете срабатывание внутреннего WDT.
Всё.

PS: И я бы лучше указал имя определённой секции (в тех местах где ...), а не абсолютный адрес. А эту секцию в .icf смаппировал на нужный адрес. И в основной программе и в бутлоадере.
Go to the top of the page
 
+Quote Post
turnon
сообщение Aug 6 2017, 09:18
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207



Цитата(jcxz @ Aug 6 2017, 11:08) *
Вы смотрите совсем не туда. __no_init тут не нужен. Как не нужен и инкремент. __no_init для этого адреса должно быть в бутлоадере.

Инкремент я привел для примера. В реальности там флаг, примерно как вы и описали (спасибо за подробный пример). К тому же флаг "подписан" контрольной суммой.
Самое важное - что линкер под это выделяет место и что с очередной прошивкой там не окажется случайно не то что ожидаемо.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 6 2017, 16:42
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(turnon @ Aug 6 2017, 12:18) *
Самое важное - что линкер под это выделяет место и что с очередной прошивкой там не окажется случайно не то что ожидаемо.

В Вашем случае важно чтобы линкёр и в бутлоадере зарезервировал тот же самый адрес. Затереть может именно стартап-код бутлоадера.
Go to the top of the page
 
+Quote Post
turnon
сообщение Aug 6 2017, 21:16
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207



Цитата(HardEgor @ Aug 5 2017, 22:06) *
Какие сутки? Вы же писали про ресеты, а не выключение питания.
Если всё-таки выключение питания, то либо ставить батарейку, либо писать надо во флеш.

А разве батарейка нужна только для BkpSram? Часы же сбросятся. Даже и не представляю, какой сценарий использования без батарейки, но с конденсатором на Vbat.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 21:59
Рейтинг@Mail.ru


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