Страница 2 из 4

Re: Работа eeprom в AVR.

Добавлено: Вс май 15, 2011 18:13:59
coredumped
king-live писал(а):

Код: Выделить всё

чтобы не было кирдыку вместо eeprom_write_xxxxx надо использовать eeprom_update_xxxxx. последняя функция перед тем. как что-то писать в ячейку, проверяет, не то же самое там записано? и, если то же самое, то запись не делает - это сильно увеличивает ресурс записей, хотя на 100% и не снимает проблему...
А это уже интересно! Не нужно отдельно проверять разницу информации. Но всёже запутался в полученной информации, вернее недопонимаю. Хожу гдето рядом....
Всёже опишите пожалуйста на моём примере. Я ещё слаб в программировании.
Спасибо.
На практике, я обычно завожу переменную-флаг, которая сигнализирует о том, что есть что сохранять в епром, те о том, что данные изменились. И потом, в процедуре сохранения уже принимается решение писать - не писать. Можете использовать update_..., это уже дело вкуса. В любом случае, логически нужно постараться избегать лишних (не нужных) операций записи в епром.

Re: Работа eeprom в AVR.

Добавлено: Вс май 15, 2011 18:29:33
ARV
king-live писал(а):А это уже интересно! Не нужно отдельно проверять разницу информации. Но всёже запутался в полученной информации, вернее недопонимаю. Хожу гдето рядом....
Всёже опишите пожалуйста на моём примере. Я ещё слаб в программировании.
Спасибо.
ну, можно например свести все eeprom-данные в структуру:

Код: Выделить всё

typedef struct{
   int coefficient;
   long init_value;
   // и так далее
} stored_data;

EEMEM stored_data e_config;

stored_data config;

int main(void){
   // загружаем конфиг из EEPROM
   eeprom_read_block(&config, &e_config, sizeof(stored_data));
   // далее делаем свои черные дела
   // в том числе ИЗМЕНЯЕМ поля config
   // после каждого изменения сохраняем обратно в EEPROM
   eeprom_update_block(&e_config, &config, sizeof(stored_data));
   // при этом реально будут записаны только те поля, которые на самом деле изменили свое значение, а не все подряд
   // то есть не все ячейки будут расходовать свой ресурс.
}
если изменение данных происходит от действий человека - проблем нет никаких: скорее всего, девайс скорее сломается или устареет, чем человек сделает 100 тысяч изменений настроек :) поэтому задумываться о ресурсе не нужно вообще.

Re: Работа eeprom в AVR.

Добавлено: Вс май 15, 2011 19:39:06
YS
Это сейчас умный GCC warning кинет и скомпилит, а в старые времена, пока return ченить не поставишь, хрен оно скомпилится, я это хорошо помню, посему и леплю ретурны "на автомате".
Ну, я из нового поколения, и таких древностей не помню. :) Первое, что мои руки пишут на автомате -

Код: Выделить всё

#include <avr/io.h>

void main(void)
{

  while (1);
}
AVR-GCC говорит на это warning: return type of 'main' is not 'int'. Но мне как-то пофиг, ибо я за здравый смысл. :)

Re: Работа eeprom в AVR.

Добавлено: Вс май 15, 2011 19:53:48
king-live
Спасибо! Попробую затолкать всё в структуру. Хотя работать буду всеголишь с 2мя переменными, которые нужно сохранять в eeprom. И на счёт "переменной-флаг" тоже идея хорошая. Попробую.

Re: Работа eeprom в AVR.

Добавлено: Вс май 29, 2011 05:52:13
sdsrem
Доброго дня всем.
Прочитал тему и возник один вопрос.
Было написанно что чел гонял EEPROM неделю и хоть бы што, хотя должен был помереть через пару минут, но так как гнал одно и тоже то EEPROM не пострадал.
Вопрос, стоит ли тогда замарачиваться с обновлением EEPROMа ежели при записи тех же данных он не будет стареть.

Или же всётаки EEPROM при записи сперва стирается а потом пишиться, но тогда у чела EEPROM должен был помереть.

Re: Работа eeprom в AVR.

Добавлено: Вс май 29, 2011 09:27:18
avreal
YS писал(а):AVR-GCC говорит на это warning: return type of 'main' is not 'int'. Но мне как-то пофиг, ибо я за здравый смысл. :)
-Wno-main есть достаточно убедительной просьбой не ворчать.
В С++ это не катит, зато в С++ по стандарту нормально написать

Код: Выделить всё

int main()
{
    for(;;) {}
}
Так как именно для main() происходит автоматическая подстановка return 0; при отсутствии возврата от щедрот программиста. В том числе если там не for(;;) {}, а реальный возврат.

Re: Работа eeprom в AVR.

Добавлено: Вс май 29, 2011 09:33:08
avreal
sdsrem писал(а):Или же всётаки EEPROM при записи сперва стирается а потом пишиться, но тогда у чела EEPROM должен был помереть.
Может он уже в коме. Т.е. при данных напряжении питания и температуре ещё пишет (хотя надо попробовать записать туда другие данные), а при -20 и другом напряжении питания уже фигушки. А контроллер из другой партии еще три дня назад и при тех же условиях перестал бы писаться (то, что кто-то пил-курил и прожил 90 лет -- еще не означает, что я дотнул бы и до 40, если бы пил/курил).

Re: Работа eeprom в AVR.

Добавлено: Вс май 29, 2011 10:41:39
md5sum
coredumped писал(а):Следующий эксперимент, где последовательно заносились значения 0x00 и 0xFF подтвердили догадку, и то епром отработал по-моему 3-х кратную норму, точно не помню.
Что считать нормой? Данные в ДШ - это минимальное кол-во циклов стирания/записи, которое выдержит память. А большее кол-во никем не запрещено :)

Re: Работа eeprom в AVR.

Добавлено: Вс май 29, 2011 20:15:37
coredumped
md5sum писал(а):
coredumped писал(а):Следующий эксперимент, где последовательно заносились значения 0x00 и 0xFF подтвердили догадку, и то епром отработал по-моему 3-х кратную норму, точно не помню.
Что считать нормой? Данные в ДШ - это минимальное кол-во циклов стирания/записи, которое выдержит память. А большее кол-во никем не запрещено :)
Да, конечно. В ДШ значится гарантированное количество циклов записи. Те при самых плохих условиях использования, гарантируется не меньше этого количества операций. Больше есс-но никто не запрещает, но правильный результат уже не гарантируется.

Re: Работа eeprom в AVR.

Добавлено: Чт июн 14, 2012 09:22:35
Eprinter
А вот интересно...
В CVAVR обращение к переменным в еепром сделано супер просто, никаких наворотов (страничка из книги в прикошаченном файле).
Получается, что CVAVR при компиляции сам подставляет нужные куски кода, или автор не совсем в теме?

Re: Работа eeprom в AVR.

Добавлено: Чт июн 14, 2012 19:37:58
YS
Получается, что CVAVR при компиляции сам подставляет нужные куски кода
Да. IAR делает так же. Но, ясно, надо иметь в виду, что специфика EEPROM от этого никуда не девается, и присваивать в такую переменную надо с пониманием того, что она не вечна.

Re: Работа eeprom в AVR.

Добавлено: Чт янв 10, 2013 23:41:44
coding
А 1млн. перезаписываней - это для пространства всей памяти eeprom или для каждого бита отдельно? т.е. если писать только значение по адресу 0х01 до отказа, то после отказа остальная область будет рабочая или крендык?

Re: Работа eeprom в AVR.

Добавлено: Вс сен 01, 2013 13:28:55
foton6
Доброго времени суток)
Столкнулся с EEPROM и возникла пара вопросов:

//При обьявлении переменной (AtmalStudio 6) выделяются первые "N" бит в зависимости от типа переменной?
И если записать в МК другую программу работающую тоже с EEPROM, то переменная того же типа что была обьявлена в предыдущей программе,
но с другим именем будет иметь значение из прошлой программы?

и если обьявлять так:
uint8_t EEMEM A;
То каждый раз при нажатии "reset", А будет всегда иметь значение записанное до сброса?Не будет ли она обнулятся при каждом новом обьявлении?

Re: Работа eeprom в AVR.

Добавлено: Вс сен 01, 2013 13:47:15
pcb
coding писал(а):А 1млн. перезаписываней - это для пространства всей памяти eeprom или для каждого бита отдельно? т.е. если писать только значение по адресу 0х01 до отказа, то после отказа остальная область будет рабочая или крендык?
Да чо вы раздули. Еепром несколько миллисекунд переписывается. более точно надо дш смотреть.

По теме.

Очень удобно использовать структуры, как, на на примере выше, показали.
Все переменные и коэф за раз при загрузке контроллера подгружаются.

Re: Работа eeprom в AVR.

Добавлено: Чт сен 05, 2013 14:29:13
Финский
Заявленный фирмой Atmel ресурс EEPROM памяти микроконтроллеров AVR, равный 100 тысячам циклов запись/чтение, относится к ресурсу одного байта памяти, а не к целой странице.
Тест EEPROM памяти AVR микроконтроллера.

Re: Работа eeprom в AVR.

Добавлено: Чт сен 05, 2013 18:18:19
pcb
антиресный опыт.

Запихнут когда нибудь ферритовую память в процессоры? :tea:

Re: Работа eeprom в AVR.

Добавлено: Чт сен 05, 2013 21:42:59
COKPOWEHEU
Так наоборот, уходят от магнитной записи. Существуют ведь экзотические сейчас микросхемы на ЦМД. С другой стороны в компьютерах иногда заменяют жесткие диски на SSD. Если уж так хочется энергонезависимости - проще организовать резервное питание и режимы сна.

Re: Работа eeprom в AVR.

Добавлено: Чт сен 05, 2013 22:06:39
pcb
Заблуждаетесь.

Re: Работа eeprom в AVR.

Добавлено: Чт сен 05, 2013 22:37:12
COKPOWEHEU
Я не говорю что уходят везде и всюду. Все-таки ограниченный ресурс перезаписи - существенный недостаток flash. Как и высокая стоимость на единицу объема. Разумеется, там, где информация должна часто перезаписываться при высокой надежности хранения (сервера например), магнитный диск предпочтительнее. Но такие применения имеют мало отношения к встраиваемым системам. Их особенности - редко изменяемая программа, низкое потребление, сравнительно низкая вычислительная мощность.

Re: Работа eeprom в AVR.

Добавлено: Пт сен 06, 2013 11:11:46
YS
Запихнут когда нибудь ферритовую память в процессоры?
Уже запихнули, и это решение уже доступно на рынке.