ATmega16: EEPROM
Нашёл подходящую тему, чтобы задать вопрос.
Подскажите "красивый" код на СИ для чтения/записи в EEPROM 32-х разрядных чисел(unsigned long int и long int). Для двухбайтных есть примеры выше по тексту (архив для скачивания - для старшего байта используется*256) и в апноуте (AVR035 - для старшего байта используется <<8).
Подскажите "красивый" код на СИ для чтения/записи в EEPROM 32-х разрядных чисел(unsigned long int и long int). Для двухбайтных есть примеры выше по тексту (архив для скачивания - для старшего байта используется*256) и в апноуте (AVR035 - для старшего байта используется <<8).
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Просто объявляй такие переменные в еепром и используй.
пример в линке в профиле - страница 05a.htm
пример в линке в профиле - страница 05a.htm
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
-
Skrrmrchoh
- Нашел транзистор. Понюхал.
- Сообщения: 185
- Зарегистрирован: Чт сен 06, 2007 22:36:09
- Откуда: Санкт-Петербург
У меня сейчас было:
написал eeprom int i , выставил BODEN, записал бит, записал программу, в программе значение i приращалось кнопкой и выводилось на дисплей...Выключил питание- на дисплее какая- то ерунда...Прочитал фьюзы- BODEN не включен...включил, еще раз перезаписал- работает....
Но это так....
У меня вопрос вот в чем: в даташите что- то сказано про 1000 циклов перезаписи EEPROM....Допустим, у меня информация записывается только при отключекнии питания, а читается при включении....Получается, что гарантированный срок жизни аппарата- 1000 циклов включение- выключение....Не маловато ли ?
написал eeprom int i , выставил BODEN, записал бит, записал программу, в программе значение i приращалось кнопкой и выводилось на дисплей...Выключил питание- на дисплее какая- то ерунда...Прочитал фьюзы- BODEN не включен...включил, еще раз перезаписал- работает....
Но это так....
У меня вопрос вот в чем: в даташите что- то сказано про 1000 циклов перезаписи EEPROM....Допустим, у меня информация записывается только при отключекнии питания, а читается при включении....Получается, что гарантированный срок жизни аппарата- 1000 циклов включение- выключение....Не маловато ли ?
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Я писал на встроенной ЕЕПРОМ счетчик наработки с записью каждые 5 минут.
Заводил в ЕЕПРОМ специальную ячейку-счетчик количества записей и при ее приближении к критическому значению "переезжал" в новую область ЕЕПРОМ с копированием данных. Вполне себе нормально работает.
Заводил в ЕЕПРОМ специальную ячейку-счетчик количества записей и при ее приближении к критическому значению "переезжал" в новую область ЕЕПРОМ с копированием данных. Вполне себе нормально работает.
Оптимизм х (Опыт + Знания) = const
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Попробую..
Предположим, я использую 10 последовательных ячеек ЕЕПРОМ.
В начале адресного пространства ЕЕПРОМ завожу еще 1 ячейку, в которой храню адрес первой ячейки из моего массива в 10 ячеек.
При каждом акте записи в ЕЕПРОМ значение в определенной ячейке из моего массива увеличивается (счетчик записей). При включении МК сначала считывает адрес начала массива (1 служебная ячейка в начале, помните?), потом проверяет значение в счетчике записей. Если оно больше заданной величины, то МК записывает в первую служебную ячейку новый адрес начала массива (старый + 10), потом копирует все данные из массива в ячейки с тем же сдвигом 10 (ну кроме счетчика, разумеется, его надо обнулить). Вот такой примерно алгоритм.
Предположим, я использую 10 последовательных ячеек ЕЕПРОМ.
В начале адресного пространства ЕЕПРОМ завожу еще 1 ячейку, в которой храню адрес первой ячейки из моего массива в 10 ячеек.
При каждом акте записи в ЕЕПРОМ значение в определенной ячейке из моего массива увеличивается (счетчик записей). При включении МК сначала считывает адрес начала массива (1 служебная ячейка в начале, помните?), потом проверяет значение в счетчике записей. Если оно больше заданной величины, то МК записывает в первую служебную ячейку новый адрес начала массива (старый + 10), потом копирует все данные из массива в ячейки с тем же сдвигом 10 (ну кроме счетчика, разумеется, его надо обнулить). Вот такой примерно алгоритм.
Оптимизм х (Опыт + Знания) = const
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
skrrmrchoh писал(а):У меня вопрос вот в чем: в даташите что- то сказано про 1000 циклов перезаписи EEPROM....Допустим, у меня информация записывается только при отключекнии питания, а читается при включении....Получается, что гарантированный срок жизни аппарата- 1000 циклов включение- выключение....Не маловато ли ?
Читаем постом выше. Resp правильно вырезку из даташита привел.
10000 (десять тысяч) циклов перезаписи флэша (памяти программ)
100000 (сто тысяч) циклов перезаписи EEPROM
P.S. Даташиты надо читать внимательно ;)