Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование ЕЕPROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
namelos
Доброе время суток всем.
В программе использую изменяемые значения(число сенсоров, максимальная температура и т.д.), которые сохранены в EEPROM. При запуске эти значения переписываюся в глобальные переменные (они то и остаются в RAMе) с которыми и работаю далее. С помощью меню изменяю как и RAM, так и EEPROM. У меня возникла мысль вообще избавиться от глобальных переменных(RAM), а работать только с EEPROM функциями, т.е в каждом цикле считывать EEPROM переменные заново. Стоит ли? Не грозит ли мне это какой-нибудь ошибкой считывания EEPROM при долговременной работе?
Kuzmi4
2 namelos - вы правы - грозит.. и именно при долговременной работе..
В ДШ на меги - любые - написано 100.000 циклов перезаписи - вот теперь приблизительно прикиньте как часто вы обращаетесь в програме к переменным и я думаю рабочее время вам вычислить не составит труда..
Andy Great
AFAIK, считывание не грозит. Я у себя так и использую, по быстродействию мне не критично.
mse
Цитата(Kuzmi4 @ Sep 6 2007, 11:18) *
2 namelos - вы правы - грозит.. и именно при долговременной работе..
В ДШ на меги - любые - написано 100.000 циклов перезаписи - вот теперь приблизительно прикиньте как часто вы обращаетесь в програме к переменным и я думаю рабочее время вам вычислить не составит труда..

Ему считывать. Кроме потерь времени (10-12 тактов на буте) проблем нет.
namelos
2 Kuzmi4, спасибо за ответ, но я говорю только о считывании EEPROMa, не о перезаписи.

Спасибо всем за ответы. После компиляции компайлер пишет о занимаемых 25 байтах RAM (глобальные переменные). Они то меня и смущают.
Kuzmi4
У меня почему то сложилось впечатление после слов - "....С помощью меню изменяю как и RAM, так и EEPROM. У меня возникла мысль вообще избавиться от глобальных переменных(RAM), а работать только с EEPROM функциями....." что нужно читать/писать..

А на счёт "25 байтах RAM" - не ГЦЦ ли юзаете? Там есть такое...
namelos
smile.gif он самый + AVR Studio.
Kuzmi4
2 namelos - ну тогда нечего сетовать - советую попробовать ещё чтото в флеш записать всмысле чтоб при старте оно уже там хранилось - всё равно рам будет занята - эдакий нъюанс ГЦЦ- в принципе встречал тут где то ветку как с этим бороться...
КСПшник
Цитата(Kuzmi4 @ Sep 6 2007, 14:06) *
2 namelos - ну тогда нечего сетовать - советую попробовать ещё чтото в флеш записать всмысле чтоб при старте оно уже там хранилось - всё равно рам будет занята - эдакий нъюанс ГЦЦ- в принципе встречал тут где то ветку как с этим бороться...


Ага.... Во флеш дефолтные параметры стоит запихать... Которые будут инициализировать епром по желанию юзера, либо повреждении епром (особенно ели это связано с исполнительными мехенизмами, а не с датчиками)....
namelos
В EEPROM, как я уже упоминал, записал изменяемые параметры (число сенсоров), но в программе мне эти значения нужны для цикла, поэтому при запуске содержимое ЕЕРRОМ копируется в глобальные переменные. И в тоже время пользователь может менять параметры. Измененные параметры записываются в ЕЕПРОМ(но не используется) и в глобальные переменные, т.е при новом старте контроллера будут использованы новые данные EEPROMa.
Pat
Цитата(namelos @ Sep 6 2007, 08:58) *
Не грозит ли мне это какой-нибудь ошибкой считывания EEPROM при долговременной работе?


При считывании, как указывали товарищи выше, боятся нечего, но ....
Я бы не делал так а хранил все в глобальных переменных.
Дело в том, что при постоянном считывании с EEPROM, вырастает вероятность испортить данные в ней,
при глюке контроллера.

Желательно и необходимо после операции записи чтения EEPROM указатель адреса EEAR = 0
Нулевую ячейку EEPROM соответственно не использовать.

Конечно в AVR приняты меры от ошибочной записи в EEPROM, но лучше подстраховаться.

Когда мне позволяет объем EEPROM, данные записываю 3 раза потом при старте проверяю их целостность и переписываю в глобальные регистры.
Сергей Борщ
Цитата(namelos @ Sep 6 2007, 09:58) *
У меня возникла мысль вообще избавиться от глобальных переменных(RAM), а работать только с EEPROM функциями, т.е в каждом цикле считывать EEPROM переменные заново. Стоит ли?
Если памяти не хватает, то стоит. А если хватает, то вы лишаете пользователя возможности после нудного тыканья в кнопки сказать "все неправильно, не буду сохранять - и так работало хорошо" и нажать ESC.
namelos
Спасибо всем за ответы.
2 Pat, что -то я не нашел как присвоить нулевой адрес ЕЕАR в avr-lib.
Компайлер gcc все делает сам. А идею записи в EEPROM для защиты от ошибки спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.