На практике, я обычно завожу переменную-флаг, которая сигнализирует о том, что есть что сохранять в епром, те о том, что данные изменились. И потом, в процедуре сохранения уже принимается решение писать - не писать. Можете использовать update_..., это уже дело вкуса. В любом случае, логически нужно постараться избегать лишних (не нужных) операций записи в епром.king-live писал(а):А это уже интересно! Не нужно отдельно проверять разницу информации. Но всёже запутался в полученной информации, вернее недопонимаю. Хожу гдето рядом....Код: Выделить всё
чтобы не было кирдыку вместо eeprom_write_xxxxx надо использовать eeprom_update_xxxxx. последняя функция перед тем. как что-то писать в ячейку, проверяет, не то же самое там записано? и, если то же самое, то запись не делает - это сильно увеличивает ресурс записей, хотя на 100% и не снимает проблему...
Всёже опишите пожалуйста на моём примере. Я ещё слаб в программировании.
Спасибо.
Работа eeprom в AVR.
Все будет только лучше, в крайнем случае - хуже.
- Реклама
ну, можно например свести все eeprom-данные в структуру:king-live писал(а):А это уже интересно! Не нужно отдельно проверять разницу информации. Но всёже запутался в полученной информации, вернее недопонимаю. Хожу гдето рядом....
Всёже опишите пожалуйста на моём примере. Я ещё слаб в программировании.
Спасибо.
Код: Выделить всё
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));
// при этом реально будут записаны только те поля, которые на самом деле изменили свое значение, а не все подряд
// то есть не все ячейки будут расходовать свой ресурс.
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Ну, я из нового поколения, и таких древностей не помню.Это сейчас умный GCC warning кинет и скомпилит, а в старые времена, пока return ченить не поставишь, хрен оно скомпилится, я это хорошо помню, посему и леплю ретурны "на автомате".
Код: Выделить всё
#include <avr/io.h>
void main(void)
{
while (1);
}
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 238
- Зарегистрирован: Сб янв 29, 2011 20:26:48
Спасибо! Попробую затолкать всё в структуру. Хотя работать буду всеголишь с 2мя переменными, которые нужно сохранять в eeprom. И на счёт "переменной-флаг" тоже идея хорошая. Попробую.
- Сообщения: 53
- Зарегистрирован: Вт апр 13, 2010 03:00:00
Доброго дня всем.
Прочитал тему и возник один вопрос.
Было написанно что чел гонял EEPROM неделю и хоть бы што, хотя должен был помереть через пару минут, но так как гнал одно и тоже то EEPROM не пострадал.
Вопрос, стоит ли тогда замарачиваться с обновлением EEPROMа ежели при записи тех же данных он не будет стареть.
Или же всётаки EEPROM при записи сперва стирается а потом пишиться, но тогда у чела EEPROM должен был помереть.
Прочитал тему и возник один вопрос.
Было написанно что чел гонял EEPROM неделю и хоть бы што, хотя должен был помереть через пару минут, но так как гнал одно и тоже то EEPROM не пострадал.
Вопрос, стоит ли тогда замарачиваться с обновлением EEPROMа ежели при записи тех же данных он не будет стареть.
Или же всётаки EEPROM при записи сперва стирается а потом пишиться, но тогда у чела EEPROM должен был помереть.
- Реклама
-Wno-main есть достаточно убедительной просьбой не ворчать.YS писал(а):AVR-GCC говорит на это warning: return type of 'main' is not 'int'. Но мне как-то пофиг, ибо я за здравый смысл.
В С++ это не катит, зато в С++ по стандарту нормально написать
Код: Выделить всё
int main()
{
for(;;) {}
}Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Может он уже в коме. Т.е. при данных напряжении питания и температуре ещё пишет (хотя надо попробовать записать туда другие данные), а при -20 и другом напряжении питания уже фигушки. А контроллер из другой партии еще три дня назад и при тех же условиях перестал бы писаться (то, что кто-то пил-курил и прожил 90 лет -- еще не означает, что я дотнул бы и до 40, если бы пил/курил).sdsrem писал(а):Или же всётаки EEPROM при записи сперва стирается а потом пишиться, но тогда у чела EEPROM должен был помереть.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Что считать нормой? Данные в ДШ - это минимальное кол-во циклов стирания/записи, которое выдержит память. А большее кол-во никем не запрещеноcoredumped писал(а):Следующий эксперимент, где последовательно заносились значения 0x00 и 0xFF подтвердили догадку, и то епром отработал по-моему 3-х кратную норму, точно не помню.
— Не говорите мне что делать и я не скажу куда Вам идти...
Да, конечно. В ДШ значится гарантированное количество циклов записи. Те при самых плохих условиях использования, гарантируется не меньше этого количества операций. Больше есс-но никто не запрещает, но правильный результат уже не гарантируется.md5sum писал(а):Что считать нормой? Данные в ДШ - это минимальное кол-во циклов стирания/записи, которое выдержит память. А большее кол-во никем не запрещеноcoredumped писал(а):Следующий эксперимент, где последовательно заносились значения 0x00 и 0xFF подтвердили догадку, и то епром отработал по-моему 3-х кратную норму, точно не помню.
Все будет только лучше, в крайнем случае - хуже.
А вот интересно...
В CVAVR обращение к переменным в еепром сделано супер просто, никаких наворотов (страничка из книги в прикошаченном файле).
Получается, что CVAVR при компиляции сам подставляет нужные куски кода, или автор не совсем в теме?
В CVAVR обращение к переменным в еепром сделано супер просто, никаких наворотов (страничка из книги в прикошаченном файле).
Получается, что CVAVR при компиляции сам подставляет нужные куски кода, или автор не совсем в теме?
- Вложения
-
- eeprom.gif
- (62.32 КБ) 556 скачиваний
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Да. IAR делает так же. Но, ясно, надо иметь в виду, что специфика EEPROM от этого никуда не девается, и присваивать в такую переменную надо с пониманием того, что она не вечна.Получается, что CVAVR при компиляции сам подставляет нужные куски кода
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 92
- Зарегистрирован: Пт ноя 25, 2011 18:20:52
А 1млн. перезаписываней - это для пространства всей памяти eeprom или для каждого бита отдельно? т.е. если писать только значение по адресу 0х01 до отказа, то после отказа остальная область будет рабочая или крендык?
- Сообщения: 146
- Зарегистрирован: Вс сен 16, 2012 22:00:40
Доброго времени суток)
Столкнулся с EEPROM и возникла пара вопросов:
//При обьявлении переменной (AtmalStudio 6) выделяются первые "N" бит в зависимости от типа переменной?
И если записать в МК другую программу работающую тоже с EEPROM, то переменная того же типа что была обьявлена в предыдущей программе,
но с другим именем будет иметь значение из прошлой программы?
и если обьявлять так:
uint8_t EEMEM A;
То каждый раз при нажатии "reset", А будет всегда иметь значение записанное до сброса?Не будет ли она обнулятся при каждом новом обьявлении?
Столкнулся с EEPROM и возникла пара вопросов:
//При обьявлении переменной (AtmalStudio 6) выделяются первые "N" бит в зависимости от типа переменной?
И если записать в МК другую программу работающую тоже с EEPROM, то переменная того же типа что была обьявлена в предыдущей программе,
но с другим именем будет иметь значение из прошлой программы?
и если обьявлять так:
uint8_t EEMEM A;
То каждый раз при нажатии "reset", А будет всегда иметь значение записанное до сброса?Не будет ли она обнулятся при каждом новом обьявлении?
Да чо вы раздули. Еепром несколько миллисекунд переписывается. более точно надо дш смотреть.coding писал(а):А 1млн. перезаписываней - это для пространства всей памяти eeprom или для каждого бита отдельно? т.е. если писать только значение по адресу 0х01 до отказа, то после отказа остальная область будет рабочая или крендык?
По теме.
Очень удобно использовать структуры, как, на на примере выше, показали.
Все переменные и коэф за раз при загрузке контроллера подгружаются.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Тест EEPROM памяти AVR микроконтроллера.Заявленный фирмой Atmel ресурс EEPROM памяти микроконтроллеров AVR, равный 100 тысячам циклов запись/чтение, относится к ресурсу одного байта памяти, а не к целой странице.
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
антиресный опыт.
Запихнут когда нибудь ферритовую память в процессоры?
Запихнут когда нибудь ферритовую память в процессоры?
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Так наоборот, уходят от магнитной записи. Существуют ведь экзотические сейчас микросхемы на ЦМД. С другой стороны в компьютерах иногда заменяют жесткие диски на SSD. Если уж так хочется энергонезависимости - проще организовать резервное питание и режимы сна.
Заблуждаетесь.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Я не говорю что уходят везде и всюду. Все-таки ограниченный ресурс перезаписи - существенный недостаток flash. Как и высокая стоимость на единицу объема. Разумеется, там, где информация должна часто перезаписываться при высокой надежности хранения (сервера например), магнитный диск предпочтительнее. Но такие применения имеют мало отношения к встраиваемым системам. Их особенности - редко изменяемая программа, низкое потребление, сравнительно низкая вычислительная мощность.
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Уже запихнули, и это решение уже доступно на рынке.Запихнут когда нибудь ферритовую память в процессоры?
Разница между теорией и практикой на практике гораздо больше, чем в теории.


