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

 
 
> Увеличение количества циклов записи в EEPROM, как правильно программно?
smk
сообщение Mar 20 2007, 20:31
Сообщение #1


Гуру
******

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



В программе используется переменная "char n". Всякий раз при включении она инкременируется и по достижении определенного значения - обнуляется. Чтение-запись происходит примерно 1 раз в секунду. При количестве циклов 100 000, надолго одной ячейки не хватит. Есть необходимость писать поочередно во все ячейки EEPROM. Как это сделать правильно, при условии что между любыми двумя циклами чтения-записи контроллер отправляется в "powerdown". Кто-то делал подобное? Как это можно сделать вообще, ведь адрес тоже нужно где-то помнить?

Буду крайне признателен за подсказки и примеры! help.gif


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Mar 21 2007, 19:19
Сообщение #2


кекс
******

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



Если записи одинакового формата. То счетчик можно хранить прямо внутри записи. При старте последовательно вычитывать все записи, найти запись с макс счетчиком и продолжать записывать со сл. места, инкрементируя счетчик естессно.
Go to the top of the page
 
+Quote Post
acorn
сообщение Mar 21 2007, 21:56
Сообщение #3


Участник
*

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



Цитата(defunct @ Mar 21 2007, 18:19) *
Если записи одинакового формата. То счетчик можно хранить прямо внутри записи. При старте последовательно вычитывать все записи, найти запись с макс счетчиком и продолжать записывать со сл. места, инкрементируя счетчик естессно.

когда дойдем до 255 (или 65535 - это вряд-ли для встроенного EEPROM) и переполнимся - как писать/искать будем?
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 30 2007, 00:54
Сообщение #4


кекс
******

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



Цитата(acorn @ Mar 21 2007, 20:56) *
когда дойдем до 255 (или 65535 - это вряд-ли для встроенного EEPROM) и переполнимся - как писать/искать будем?

Нужно чтобы количество записей было меньше разрешающей способности счетчика, тогда с поиском никаких проблем. Вот набросал пример:

Код
#define STORAGE_SIZE 128

typedef struct tagSTORAGE_REC
{
    U8 Sequence;
} TSTORAGE_REC, *PSTORAGE_REC;

TSTORAGE_REC Storage[STORAGE_SIZE];

U8 MaxSequenceIndex(void)
{
    U8 retval = 0;
    U8 max = Storage[0].Sequence;
    U8 i;
    
    for (i = 1; i < COUNT(Storage); i++)
       if (max < Storage[i].Sequence)
       {
          max = Storage[i].Sequence;
          retval = i;
       }
    return retval;
}

#define Next( Index ) ((Index) >= (STORAGE_SIZE -1)) ? 0 : Index + 1;
      
void Store(void)
{
    U8 Idx = MaxSequenceIndex(); // index for the next cell to write data to
    U8 Sq = Storage[ Idx ].Sequence;
    
    if ( Sq == 0xFF )
    { // warp
       U8 OldSq;
       U8 delta;
       do
       {
           OldSq = Sq;
           Idx = Next( Idx );
           Sq = Storage[ Idx ].Sequence;
           delta = Sq - OldSq;
       } while (  delta == 1);
       Sq = OldSq;
    }
    else
    { // normal case
       Idx = Next( Idx );
    }
    Sq += 1;
    Storage[ Idx ].Sequence = Sq; // Записываем..
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- smk   Увеличение количества циклов записи в EEPROM   Mar 20 2007, 20:31
- - Сергей Борщ   Давно в ru.embedded пробегала такая идея: использо...   Mar 20 2007, 21:31
- - prottoss   Цитата(smk @ Mar 21 2007, 00:31) ... Поищ...   Mar 20 2007, 21:35
- - CDT   ... Выделяем кусок ЭПРОМ, в котором храним счетчик...   Mar 21 2007, 07:56
|- - mse   Цитата(CDT @ Mar 21 2007, 07:56) КодFM252...   Mar 21 2007, 09:53
|- - Nanobyte   Цитата(mse @ Mar 21 2007, 09:53) ...Кроме...   Mar 21 2007, 11:30
|- - mse   Цитата(Nanobyte @ Mar 21 2007, 11:30) Поч...   Mar 21 2007, 11:59
|- - Сергей Борщ   Цитата(mse @ Mar 21 2007, 10:59) Если бы ...   Mar 21 2007, 12:30
- - Dog Pawlowa   Цитата(smk @ Mar 20 2007, 21:31) В програ...   Mar 21 2007, 10:14
- - WHALE   имхо,для таких задач RTC с внутренним ОЗУ с батаре...   Mar 21 2007, 12:56
- - rumit2000   to Сергей Борщ не в тему ветки, но про FRAM, не мо...   Mar 21 2007, 15:52
|- - Сергей Борщ   Цитата(rumit2000 @ Mar 21 2007, 14:52) в ...   Mar 21 2007, 16:16
|- - rumit2000   Цитата(Сергей Борщ @ Mar 21 2007, 16:16) ...   Mar 21 2007, 16:19
- - CD_Eater   rumit2000 В ДШ к последним FRAM-ным м/сх указывает...   Mar 21 2007, 16:22
|- - rumit2000   Цитата(CD_Eater @ Mar 21 2007, 16:22) Но ...   Mar 21 2007, 16:29
|- - Rst7   Цитата(CD_Eater @ Mar 21 2007, 15:22) Поч...   Mar 21 2007, 17:01
- - CD_Eater   Rst7, Вы не правы. Байт, отвечающий за младший би...   Mar 21 2007, 17:33
|- - Сергей Борщ   Цитата(CD_Eater @ Mar 21 2007, 16:33) Rst...   Mar 21 2007, 18:26
- - smk   Есть предложение. Кто-нибудь может привести конкре...   Mar 21 2007, 18:32
- - xemul   Соглашусь с предыдущими ораторами - при такой част...   Mar 21 2007, 18:41
- - smk   ЦитатаДык вроде бы питание не снимается, а только ...   Mar 21 2007, 19:12
|- - xemul   Цитата(smk @ Mar 21 2007, 19:12) Но есть ...   Mar 22 2007, 09:55
- - proba   если сделать кольцевои счетчик из 256 баит то числ...   Mar 21 2007, 22:55
- - CD_Eater   Почему запись без стирания не считается изнашивающ...   Mar 21 2007, 23:31
- - smk   ЦитатаНесложно подсчитать, что VW не расчитаны на ...   Mar 22 2007, 11:10
|- - Григорий2000   Самое простое - это хранение в начале/конце еепро...   Mar 29 2007, 15:56
- - Alex B._   >> Но вот только ходят слухи, что главный би...   Mar 29 2007, 22:31


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:37
Рейтинг@Mail.ru


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