тип данных EEPROM
- Войдите на сайт для отправки комментариев
Сб, 24/10/2015 - 23:34
Не могу понять какой тип данных у EEPROM.
У меня данные для хранения int- 2 байта, меньше не могу, а у ПЗУ я так нонимаю 1 байт, что делать, или записывать их в 2 ячейки, то как это съделать коректно?
заранее спасибо.
Да как угодно, лишь бы байты записывались в том же порядке, в каком потом читаются. Ну, если по рабоче-крестьянски (без union там), то хоть так:
Теперь спокойно пишите туда *pLowByte и *pHighByte.
Только непонятно, зачем такое извращение, когда функция EEPROM.put вполне может записать туда любой тип данных хоть int, хоть float, хоть даже произвольную структуру или класс.
Только непонятно, зачем такое извращение, когда функция EEPROM.put вполне может записать туда любой тип данных хоть int, хоть float, хоть даже произвольную структуру или класс.
Ну, как бы EERPOM бывает не только на кристалле Атмеги. И не все библиотеки допускают обмен данными отличающимися от байта.
Другое дело, что при записи с этим нужно быть предельно осторожным, т.к. бывает, что интервал времени между двумя последовательными записями не должен быть меньше 5000 мкс. При несоблюдении интервала данные просто теряются. А библиотека Wire это никак не отслеживает (хотя, могла бы).
не совсе понял, тоесть применяя EEPROM.put и get компилятор сам будет выделять нужное кол- во байт?
или мне всё равно нужно учитывать длину данных и обращаться к ним с начальным адресом? тоесть если в EEPROM(0) храница первый INT, то ко второму я обращаюсь по адресу EEPROM(2).
Вот что за мания такая на каждый новый вопрос по одной тематике создавать новую тему на форуме? o_0
Используй библиотеку
EEPROMex с оф сайта. Можешь записывать хоть double. Она сама все раскидает так как надо
не совсе понял, тоесть применяя EEPROM.put и get компилятор сам будет выделять нужное кол- во байт?
или мне всё равно нужно учитывать длину данных и обращаться к ним с начальным адресом? тоесть если в EEPROM(0) храница первый INT, то ко второму я обращаюсь по адресу EEPROM(2).
Разумеется, если писать следующее что-то, адрес надо поменять на sizeof(<используемый тип>), т.е. для int - на 2.
Это просто упрощалка - есть у Вас структура myS на 43 байта, напишите EEPROM.put(myS) он все 43 байта и зафигачит.
Вот тексты put и get из стандартной поставки Arduino IDE
Ну, как бы EERPOM бывает не только на кристалле Атмеги. И не все библиотеки допускают обмен данными отличающимися от байта.
EEPROM делится на страницы.
И из-за этого с записью туда намного сложнее, чем со считыванием.
И "побайтно" мы будем писать в темпе 50 long в секунду.
Это если писать правильно. А если неправильно (не выдерживая пауз), то записанным окажется только первый байт.