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

 
 
 
Reply to this topicStart new topic
> Аппартный сброс и ОЗУ
stapleman
сообщение Mar 20 2009, 17:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Здравствуйте.
У меня имеется несколько вопросов по поводу аппаратного сброса:
1. Что происходит с ОЗУ контроллера при аппаратном сбросе.
2. Если ОЗУ обнуляется, то можно ли это обнуление запретить.
3. Обнуляются ли регистры общего назначения.

А в целом проблема заключается в следующем:
Мне необходимо сохранить в контроллере некое значение. Затем сделать резет контроллера (питание при этом не сбрасывается гарантированно). И чтобы это значение потом прочитать. Вся загвоздка заключается в том, чтобы не использовати EEPROM, так он имеет конечное число циклов перезаписи, и не хочется чтобы через пару лет устройство перестало работать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2009, 18:24
Сообщение #2


Гуру
******

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



Цитата(stapleman @ Mar 20 2009, 19:13) *
1. Что происходит с ОЗУ контроллера при аппаратном сбросе.
Ничего.
Цитата(stapleman @ Mar 20 2009, 19:13) *
2. Если ОЗУ обнуляется, то можно ли это обнуление запретить.
Даташит  - наша библия. В даташите нет ни слова об обнулении. Раздел System Control and Reset
Цитата(stapleman @ Mar 20 2009, 19:13) *
3. Обнуляются ли регистры общего назначения.
Нет. См. п.2
Цитата(stapleman @ Mar 20 2009, 19: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
smk
сообщение Mar 20 2009, 18:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



char my_variable __attribute__ ((section (".noinit")));

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


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Guest_Скопидор_*
сообщение Mar 20 2009, 18:59
Сообщение #4





Guests






Не меняется ни ОЗУ ни РОН.

P.S. А проверить было в "железе" не судьба? Ведь это дело 5-ти минут
Go to the top of the page
 
+Quote Post
stapleman
сообщение Mar 20 2009, 20:01
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Цитата(smk @ Mar 20 2009, 21:28) *
char my_variable __attribute__ ((section (".noinit")));

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


Спасибо большое. Я тоже WINAVR использую, поэтому такой ответ мне очень помог.
PS Можно ли где-нибудь про такие штуки типа __attribute__ ((section (".noinit"))); почитать на русском?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 20 2009, 20:28
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Сергей Борщ @ Mar 20 2009, 22:24) *
Интересно, как вы отличите это значение от мусора, который будет в том месте после включения питания?

Если имеется аппаратный PowerFail, то возможно, путём выделения спец зоны озу с контролем по типу контроля протокола.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Mar 20 2009, 20:49
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Сергей Борщ @ Mar 20 2009, 21:24) *
Интересно, как вы отличите это значение от мусора, который будет в том месте после включения питания?

1. Там можно CRC на данные хранить.
2. Можно флаг EXTRF проверять (если внешний BOD не используется).
А вообще состояние ОЗУ после включения не такое уж и случайное. Пробовал по нему защиту от копирования делать (не на АВР). Получалось.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 21 2009, 00:09
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Mar 20 2009, 20:24) *
Интересно, как вы отличите это значение от мусора, который будет в том месте после включения питания?

Можно по флажку POR в регистре MCUSR(MCUCSR). Если взведен - было отключение питания
Сбрасывать флажек надо вручную.
Go to the top of the page
 
+Quote Post
AlexCrush
сообщение Mar 22 2009, 09:16
Сообщение #9





Группа: Участник
Сообщений: 11
Регистрация: 21-03-05
Пользователь №: 3 573



Вообще, с ОЗУ контроллера при сбросе действительно ничего не происходит.
Более того, при выключении питания тоже содержимое ОЗУ сохраняется некоторое время (несколько минут) невредимым.
Я это использую в одной разработке следующим образом: есть некое состояние системы, которое вообще было бы неплохо (но не обязательно) восстанавливать после сбоев питания. Однако в EEProm для данного состояния места нет, да и состояние меняется слишком часто чтобы позволить себе запись в ЕЕПром.
Выход - храним состояние в ОЗУ. А при старте МК проверяем, в порядке ли состояние в ОЗУ. Если нет - не беда, "холодный" старт. Если же в порядке - ну повезло, старт будет "горячий".
Проверка правильности выполняется просто - контрольная сумма, пересчитываемая при каждой записи в "охраняемую" область ОЗУ.
Позднее на плату добавился ионистор для поддержки питания МК в течение нескольких десятков секунд для того чтобы сохранить всё в ЕЕПром, при этом обнаружился эффект: при разрядке ионистора и падении напряжения питания до 2.4 в МК вырубается BOD-ом, при этом МК почти перестает потреблять энергию и оставшиеся 2.4 падают до 0.5в в течение нескольких часов. Всё это время состояние ОЗУ сохраняется! Т.е. если ус-во включить - то происходит горячий старт с поднятием состояния из ОЗУ.
Вот такие пироги.
Go to the top of the page
 
+Quote Post
woroba
сообщение Mar 22 2009, 14:00
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 18-07-05
Пользователь №: 6 871



Цитата(AlexCrush @ Mar 22 2009, 15:16) *
Более того, при выключении питания тоже содержимое ОЗУ сохраняется некоторое время (несколько минут) невредимым.

Спасибо за идею, как раз ломал голову как сохранить состочние МК(запись вEEPROM не укладывается по времени)
Go to the top of the page
 
+Quote Post

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

 


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


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