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

 
 
> Энергонезависимая Память AVR
Br.Misha
сообщение Feb 27 2011, 12:27
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Привет!
В ДШ на атмегу написано, что еепром можно перезаписывать 100000 раз. Это касается каждой ячейки отдельно или нет?
Почему спрашиваю? Просто хочу сделать девайс, который будет работать много лет и много раз будет перезаписана. У атмеги8 512 байт, всего мне нужно около 15 байт. Принцип такой: 16 байт используются для хранения даных и 4 байта для хранения счетчика записей. После каждой записи я буду увеличивать счетчик на 1 и когда дойдет до 100000, то буду записывать даные и счетчик в следующие 20 байт, получается, циклов записи будет около 2 милионов (для атмега8). Как вам идея?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Feb 27 2011, 12:53
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



[PDF] AVR101: High Endurance EEPROM Storage
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение Feb 27 2011, 14:15
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



Делал так:

CODE
//----------------------------------------------------------------------------

//Eeprom support module

//----------------------------------------------------------------------------

#include <Main.h>
#include <Eeprom.h>

//------------------------------ Constants: ----------------------------------

#define RBUFF 100 //EEPROM ring buffer size
#define RSIG 0xDA //record header signature

//------------------------------ Variables: ----------------------------------

typedef struct
{
char Sig; //record header signature
bool On; //On flag
int Val; //stored value
} EVal;

__no_init __eeprom int EData[EE_N]; //EEPROM data array
__no_init __eeprom EVal EVals[RBUFF]; //EEPROM ring buffer

static char EePnt = 0; //pointer to currently used record

//-------------------------- Read EEPROM data: -------------------------------

int Eeprom_Read(char a)
{
return(EData[a]); //read parameter
}

//-------------------------- Write EEPROM data: -------------------------------

void Eeprom_Write(char a, int d)
{
if(EData[a] != d) //if parameter changed
{
EData[a] = d; //write parameter
__watchdog_reset(); //watchdog reset
}
}

//-------------------------- Read V from EEPROM: -----------------------------

int Eeprom_ReadV(bool *on)
{
EePnt = RBUFF; //set incorrect pointer value
for(char i = 0; i < RBUFF; i++) //search signature in ring buffer
if(EVals[i].Sig == RSIG) //if signature found
{
EePnt = i; //initialize pointer
break;
}
if(EePnt == RBUFF) //if pointer incorrect (signature not found)
{
EePnt = 0; //set pointer to first array record
*on = 0; //supply off
return(0); //return V = 0
}
*on = EVals[EePnt].On; //read on flag
return(EVals[EePnt].Val); //read V
}

//--------------------------- Write V to EEPROM: -----------------------------

void Eeprom_WriteV(int v, bool on)
{
char NewPnt = EePnt; //save previous pointer value
if(NewPnt++ == RBUFF) //advance pointer
NewPnt = 0; //roll-up pointer
EVals[NewPnt].On = on; //save on flag
EVals[NewPnt].Val = v; //save V
EVals[NewPnt].Sig = RSIG; //save signature at new location
EVals[EePnt].Sig = 0xFF; //clear signature at old location
__watchdog_reset(); //watchdog reset
EePnt = NewPnt; //save new pointer value
}

//----------------------------------------------------------------------------


Сообщение отредактировал IgorKossak - Feb 27 2011, 15:21
Причина редактирования: Бездумное оформление кода


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Br.Misha   Энергонезависимая Память AVR   Feb 27 2011, 12:27
- - alexunder   Цитата(Br.Misha @ Feb 27 2011, 15:27) 4 б...   Feb 27 2011, 12:38
- - defunct   Цитата(Br.Misha @ Feb 27 2011, 14:27) Как...   Mar 1 2011, 12:54
|- - zombi   Цитата(defunct @ Mar 1 2011, 16:54) Лучше...   Mar 1 2011, 15:01
||- - defunct   Цитата(zombi @ Mar 1 2011, 17:01) Если пр...   Mar 3 2011, 16:20
|- - Dimoza   Цитата(defunct @ Mar 1 2011, 15:54) сдела...   Mar 1 2011, 15:30
|- - zombi   Цитата(Dimoza @ Mar 1 2011, 19:30) И по в...   Mar 1 2011, 15:34
- - GDI   Только надо еще как то узнать о том что произошел ...   Mar 1 2011, 14:10
|- - demiurg_spb   Цитата(GDI @ Mar 1 2011, 17:10) Только на...   Mar 1 2011, 14:29
- - ukpyr   Цитата4 байта для хранения счетчика записейхватит ...   Mar 1 2011, 15:21
- - ArtemKAD   ЦитатаНи фигасе! Вот бы найти документальное п...   Mar 1 2011, 17:12
- - ukpyr   ЦитатаИ по возможности не располагать его с 0 адре...   Mar 1 2011, 17:53
|- - sgs   Цитата(ukpyr @ Mar 1 2011, 21:53) старая ...   Mar 2 2011, 07:34
|- - VladimirYU   Цитата(ukpyr @ Mar 1 2011, 20:53) старая ...   Mar 2 2011, 10:03
|- - demiurg_spb   image-craft тоже не использует по-инерции avr-gcc ...   Mar 2 2011, 12:06
|- - Petka   Цитата(demiurg_spb @ Mar 2 2011, 15:06) ....   Mar 2 2011, 17:44
|- - demiurg_spb   Цитата(Petka @ Mar 2 2011, 20:44) avr-gcc...   Mar 3 2011, 10:06
- - SysRq   А всё-таки, EEPROM в AVR страничной организации, и...   Mar 3 2011, 16:43
|- - defunct   Цитата(SysRq @ Mar 3 2011, 18:43) А всё-т...   Mar 3 2011, 16:47
- - zombi   To defunct. Я не могу понять что такое это sequenc...   Mar 3 2011, 16:58
|- - aaarrr   Цитата(zombi @ Mar 3 2011, 19:58) Я не мо...   Mar 3 2011, 22:21
||- - Сергей Борщ   QUOTE (aaarrr @ Mar 4 2011, 00:21) Размер...   Mar 4 2011, 11:00
|- - defunct   Цитата(zombi @ Mar 3 2011, 18:58) что так...   Mar 4 2011, 15:02
|- - zombi   Цитата(aaarrr @ Mar 4 2011, 01:21) Хранит...   Mar 5 2011, 11:34
- - SysRq   Цитата(defunct @ Mar 3 2011, 19:47) Всегд...   Mar 3 2011, 17:00
|- - zombi   Цитата(SysRq @ Mar 3 2011, 20:00) Тогда н...   Mar 3 2011, 17:13
- - ukpyr   ЦитатаОсталось только выяснить : приводит ли к исч...   Mar 3 2011, 22:06
- - SysRq   Цитата(zombi @ Mar 5 2011, 14:34) Т.е. по...   Mar 5 2011, 12:29
|- - zombi   Цитата(SysRq @ Mar 5 2011, 15:29) Убивает...   Mar 5 2011, 13:00
|- - SysRq   Цитата(zombi @ Mar 5 2011, 16:00) Но мне ...   Mar 5 2011, 13:54
|- - zombi   Цитата(SysRq @ Mar 5 2011, 16:54) Примерн...   Mar 5 2011, 20:23
|- - SysRq   Цитата(zombi @ Mar 5 2011, 23:23) Наверно...   Mar 5 2011, 20:34
|- - zombi   Цитата(SysRq @ Mar 5 2011, 23:34) Запись ...   Mar 5 2011, 22:47
- - 314   Почему-то всегда казалось, что тип флеш, использов...   Mar 5 2011, 14:55
- - SysRq   Выключил на 1'800'000. Изменил в исходнике...   Mar 5 2011, 16:23
- - SysRq   Результат записи 0x00 (по приведённому выше алгори...   Mar 6 2011, 06:24
|- - zombi   Цитата(SysRq @ Mar 6 2011, 09:24) Результ...   Mar 6 2011, 08:14
|- - aaarrr   Цитата(zombi @ Mar 6 2011, 11:14) Но 3...   Mar 6 2011, 15:48
- - SysRq   Результат записи постоянно меняющегося значения: у...   Mar 6 2011, 15:02
- - zombi   Провел эксперимент с ATmega162-16AU @ 5V @ 16MHz @...   Mar 14 2011, 09:41
- - Juk1976   Народ!!! Да не мучайте себя. Используй...   Mar 16 2011, 21:59
|- - aaarrr   Цитата(Juk1976 @ Mar 17 2011, 00:59) Испо...   Mar 16 2011, 22:34
- - 314   At24cXX - I2C- dip8 - 0.2-0.3$ более 1е6 запи...   Mar 17 2011, 06:33
- - nand7   Попробуйте провести эксперимент на температуре 125...   Mar 17 2011, 07:56


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

 


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


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