Запись большого числа в память Mega8

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Здравствуйте.
Подскажите пожалуйста, как записать в память 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. Делаю счётчик импульсов.
Спасибо заранее.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 472
Зарегистрирован: Ср фев 15, 2012 09:00:34
Откуда: Киев

Сообщение Eugene.Negrobov »

Пользуюсь CVAVR, там очень просто:
eeprom unsigned long int peremennaya;

P.S.
Счетчики в EEPROM лучше не держать, ибо у этой памяти немного циклов перезаписи, не более 100 тыс.
Лучше держать значение в ОЗУ, а при просадке питания(выключении) сохранять все в EEPROM.
:wink:
I'm on a huge rock, flying through space!
Реклама
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение 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)
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Eugene.Negrobov писал(а):Пользуюсь CVAVR, там очень просто:
eeprom unsigned long int peremennaya;

P.S.
Счетчики в EEPROM лучше не держать, ибо у этой памяти немного циклов перезаписи, не более 100 тыс.
Лучше держать значение в ОЗУ, а при просадке питания(выключении) сохранять все в EEPROM.
:wink:
Это понятно, так и делаю, храню в EEPROM.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

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)
А вот Вам спасибо, сейчас попробую.
Реклама
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Пробую симулировать в 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? чтобы считала дальше?
Реклама
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

L или Lu
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Vov123 писал(а):L или Lu
Спасибо, пробую...
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Vov123 писал(а):L или Lu
Не помогло,ни l ни lu, всё равно до 65 ххх
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Vov123, а переменная MaxO - правильно объявлена?
Последний раз редактировалось СергейКир Вт авг 20, 2013 14:19:21, всего редактировалось 1 раз.
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

ПОЛУЧИЛОСЬ! с lu.
Спасибо всем!
P.S. Я конечно начинающий, но иногда поражаюсь своему тупняку, и восхищаюсь теми, кто помогает. СПАСИБО!
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Вот эта книжка http://easyelectronics.ru/shpak-yua-pro ... lerov.html
стр.338 интересующие вас функции.
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Vov123 писал(а):Вот эта книжка http://easyelectronics.ru/shpak-yua-pro ... lerov.html
стр.338 интересующие вас функции.
Спасибо, буду изучать.
Ответить

Вернуться в «AVR»