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

 
 
 
Reply to this topicStart new topic
> Использование ЕЕPROM, EEPROM vs. RAM
namelos
сообщение Sep 6 2007, 06:58
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Доброе время суток всем.
В программе использую изменяемые значения(число сенсоров, максимальная температура и т.д.), которые сохранены в EEPROM. При запуске эти значения переписываюся в глобальные переменные (они то и остаются в RAMе) с которыми и работаю далее. С помощью меню изменяю как и RAM, так и EEPROM. У меня возникла мысль вообще избавиться от глобальных переменных(RAM), а работать только с EEPROM функциями, т.е в каждом цикле считывать EEPROM переменные заново. Стоит ли? Не грозит ли мне это какой-нибудь ошибкой считывания EEPROM при долговременной работе?

Сообщение отредактировал namelos - Sep 6 2007, 07:13
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2007, 07:18
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 namelos - вы правы - грозит.. и именно при долговременной работе..
В ДШ на меги - любые - написано 100.000 циклов перезаписи - вот теперь приблизительно прикиньте как часто вы обращаетесь в програме к переменным и я думаю рабочее время вам вычислить не составит труда..
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Sep 6 2007, 07:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



AFAIK, считывание не грозит. Я у себя так и использую, по быстродействию мне не критично.
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 6 2007, 07:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Kuzmi4 @ Sep 6 2007, 11:18) *
2 namelos - вы правы - грозит.. и именно при долговременной работе..
В ДШ на меги - любые - написано 100.000 циклов перезаписи - вот теперь приблизительно прикиньте как часто вы обращаетесь в програме к переменным и я думаю рабочее время вам вычислить не составит труда..

Ему считывать. Кроме потерь времени (10-12 тактов на буте) проблем нет.
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 6 2007, 07:33
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



2 Kuzmi4, спасибо за ответ, но я говорю только о считывании EEPROMa, не о перезаписи.

Спасибо всем за ответы. После компиляции компайлер пишет о занимаемых 25 байтах RAM (глобальные переменные). Они то меня и смущают.

Сообщение отредактировал namelos - Sep 6 2007, 07:33
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2007, 08:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



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

А на счёт "25 байтах RAM" - не ГЦЦ ли юзаете? Там есть такое...
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 6 2007, 09:30
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



smile.gif он самый + AVR Studio.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2007, 10:06
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 namelos - ну тогда нечего сетовать - советую попробовать ещё чтото в флеш записать всмысле чтоб при старте оно уже там хранилось - всё равно рам будет занята - эдакий нъюанс ГЦЦ- в принципе встречал тут где то ветку как с этим бороться...
Go to the top of the page
 
+Quote Post
КСПшник
сообщение Sep 6 2007, 11:04
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 57
Регистрация: 7-09-05
Пользователь №: 8 307



Цитата(Kuzmi4 @ Sep 6 2007, 14:06) *
2 namelos - ну тогда нечего сетовать - советую попробовать ещё чтото в флеш записать всмысле чтоб при старте оно уже там хранилось - всё равно рам будет занята - эдакий нъюанс ГЦЦ- в принципе встречал тут где то ветку как с этим бороться...


Ага.... Во флеш дефолтные параметры стоит запихать... Которые будут инициализировать епром по желанию юзера, либо повреждении епром (особенно ели это связано с исполнительными мехенизмами, а не с датчиками)....
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 6 2007, 13:22
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



В EEPROM, как я уже упоминал, записал изменяемые параметры (число сенсоров), но в программе мне эти значения нужны для цикла, поэтому при запуске содержимое ЕЕРRОМ копируется в глобальные переменные. И в тоже время пользователь может менять параметры. Измененные параметры записываются в ЕЕПРОМ(но не используется) и в глобальные переменные, т.е при новом старте контроллера будут использованы новые данные EEPROMa.

Сообщение отредактировал namelos - Sep 6 2007, 13:34
Go to the top of the page
 
+Quote Post
Pat
сообщение Sep 6 2007, 13:55
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(namelos @ Sep 6 2007, 08:58) *
Не грозит ли мне это какой-нибудь ошибкой считывания EEPROM при долговременной работе?


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

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

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

Когда мне позволяет объем EEPROM, данные записываю 3 раза потом при старте проверяю их целостность и переписываю в глобальные регистры.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 6 2007, 14:15
Сообщение #12


Гуру
******

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



Цитата(namelos @ Sep 6 2007, 09:58) *
У меня возникла мысль вообще избавиться от глобальных переменных(RAM), а работать только с EEPROM функциями, т.е в каждом цикле считывать EEPROM переменные заново. Стоит ли?
Если памяти не хватает, то стоит. А если хватает, то вы лишаете пользователя возможности после нудного тыканья в кнопки сказать "все неправильно, не буду сохранять - и так работало хорошо" и нажать ESC.


--------------------
На любой вопрос даю любой ответ
"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
namelos
сообщение Sep 6 2007, 15:07
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Спасибо всем за ответы.
2 Pat, что -то я не нашел как присвоить нулевой адрес ЕЕАR в avr-lib.
Компайлер gcc все делает сам. А идею записи в EEPROM для защиты от ошибки спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:58
Рейтинг@Mail.ru


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