Страница 1 из 1
Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 10:09:51
СергейКир
Здравствуйте.
Подскажите пожалуйста, как записать в память Mega8 большое число, например 15 005 460.
Использую стандартную библиотеку <avr/eeprom.h>.
До 255 пишу так
Код: Выделить всё
char maxoil;
char eeprom_var EEMEM; // определяем переменную в EEPROM
//...................
eeprom_write_byte(&eeprom_var, maxoil); // записываем в EEPROM
читаю так
Код: Выделить всё
maxoil = eeprom_read_byte(&eeprom_var); // считываем байт из EEPROM и помещаем его в "maxoil"
Можно использовать тип WORD, это до 65536. Но этого мало.
Как правильно разбить большое число?
Среда avrstudio6, язык Си.
P.S. Делаю счётчик импульсов.
Спасибо заранее.
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 12:15:33
Eugene.Negrobov
Пользуюсь CVAVR, там очень просто:
eeprom unsigned long int peremennaya;
P.S.
Счетчики в EEPROM лучше не держать, ибо у этой памяти немного циклов перезаписи, не более 100 тыс.
Лучше держать значение в ОЗУ, а при просадке питания(выключении) сохранять все в EEPROM.

Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 12:40:56
a_skr
СергейКир писал(а):
Можно использовать тип WORD, это до 65536. Но этого мало.
Как правильно разбить большое число?
зачем его разбивать? есть стандартные 32-разрядные типы. например:
uint32_t - беззнаковый, диапазон 0 - 4294967295
и функции записи/чтения eeprom:
Код: Выделить всё
uint32_t eeprom_read_dword (const uint32_t *__p)
void eeprom_write_dword (uint32_t *__p, uint32_t __value)
void eeprom_update_dword (uint32_t *__p, uint32_t __value)
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 13:16:58
СергейКир
Eugene.Negrobov писал(а):Пользуюсь CVAVR, там очень просто:
eeprom unsigned long int peremennaya;
P.S.
Счетчики в EEPROM лучше не держать, ибо у этой памяти немного циклов перезаписи, не более 100 тыс.
Лучше держать значение в ОЗУ, а при просадке питания(выключении) сохранять все в EEPROM.

Это понятно, так и делаю, храню в EEPROM.
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 13:17:50
СергейКир
a_skr писал(а):СергейКир писал(а):
Можно использовать тип WORD, это до 65536. Но этого мало.
Как правильно разбить большое число?
зачем его разбивать? есть стандартные 32-разрядные типы. например:
uint32_t - беззнаковый, диапазон 0 - 4294967295
и функции записи/чтения eeprom:
Код: Выделить всё
uint32_t eeprom_read_dword (const uint32_t *__p)
void eeprom_write_dword (uint32_t *__p, uint32_t __value)
void eeprom_update_dword (uint32_t *__p, uint32_t __value)
А вот Вам спасибо, сейчас попробую.
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 13:54:29
СергейКир
Пробую симулировать в Proteus.
Делаю так
Код: Выделить всё
uint32_t maxoil;
uint32_t eeprom_var EEMEM; // определяем переменную в EEPROM
char [8] MaxO;
//............
Запись и чтение проходят нормально.
Но вот как мне теперь организовать вывод числа?
Делаю вот так
Код: Выделить всё
maxoil = eeprom_read_dword(&eeprom_var); // считываем из EEPROM и помещаем его в "maxoil"
sprintf(MaxO,"%u", maxoil);
lcd_string(MaxO,8);
Вопрос. Увеличение переменной maxoil идёт до 65 536, а дальше по новой с 0.
Какие параметры необходимо применить у функции sprintf? чтобы считала дальше?
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 13:59:49
Vov123
L или Lu
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:04:28
СергейКир
Vov123 писал(а):L или Lu
Спасибо, пробую...
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:06:08
Vov123
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:10:05
СергейКир
Vov123 писал(а):L или Lu
Не помогло,ни l ни lu, всё равно до 65 ххх
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:12:14
СергейКир
Vov123, а переменная MaxO - правильно объявлена?
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:15:01
СергейКир
ПОЛУЧИЛОСЬ! с lu.
Спасибо всем!
P.S. Я конечно начинающий, но иногда поражаюсь своему тупняку, и восхищаюсь теми, кто помогает. СПАСИБО!
Re: Запись большого числа в память Mega8
Добавлено: Вт авг 20, 2013 14:20:45
Vov123
Re: Запись большого числа в память Mega8
Добавлено: Чт авг 22, 2013 08:51:39
СергейКир