Работа eeprom в AVR.

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

Только у нас это чудо трудновато достать. TI sample выручает!
Реклама
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

КОМПЭЛ вроде поставляет.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

приветствую
возник вопрос как сделать так чтобы записать массив данных в еепром и больше в него не записывать(а просто считывать), дабы не уменьшать количество циклов записи еепрома, контроллер будет часто обестачиваться

если я вот так напишу:

Код: Выделить всё

eeprom char eepromrom [2][8] ={{0x28, 0xB4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC5}, {0x28, 0x31, 0xC5, 0xB8, 0x0, 0x0, 0x0, 0xB9}};
то будет при каждом включении перезаписываться еепром, а я хочу один раз только записать, как это сделать?

а если я например вот так объявлю массив, то всё равно будут элементы записываться при старте контроллера?

Код: Выделить всё

eeprom char eepromrom [2][8];
Последний раз редактировалось Misha119 Сб июн 20, 2015 20:28:08, всего редактировалось 1 раз.
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

после первого включения слить еепром, удалить строчку из программы и залить все обратно.
второй вариан проверить ячейку памяти если там не FF пропустить запись...
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

Mishany писал(а):после первого включения слить еепром, удалить строчку из программы и залить все обратно.
думал об этом, но при удалении строчки с объявлением массива компилятор сразу ругается что не объявлен массив(у меня в коде с него данные считываются)
Реклама
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Misha119 писал(а): если я вот так напишу:

Код: Выделить всё

eeprom char eepromrom [2][8] ={{0x28, 0xB4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC5}, {0x28, 0x31, 0xC5, 0xB8, 0x0, 0x0, 0x0, 0xB9}};
то будет при каждом включении перезаписываться еепром
Не будет каждый раз переписываться. Компилятор создаст для еепром файл с вашими данными, а вы с ним будете делать что захотите.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

Misha119 писал(а):приветствую
возник вопрос как сделать так чтобы записать массив данных в еепром и больше в него не записывать(а просто считывать), дабы не уменьшать количество циклов записи еепрома, контроллер будет часто обестачиваться

если я вот так напишу:

Код: Выделить всё

eeprom char eepromrom [2][8] ={{0x28, 0xB4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC5}, {0x28, 0x31, 0xC5, 0xB8, 0x0, 0x0, 0x0, 0xB9}};
то будет при каждом включении перезаписываться еепром, а я хочу один раз только записать, как это сделать?

а если я например вот так объявлю массив, то всё равно будут элементы записываться при старте контроллера? (ну то есть забъются элементы массива нулями или FF? или останутся нетронутыми?)

Код: Выделить всё

eeprom char eepromrom [2][8];
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

будет при каждом включении перезаписываться еепром
Э-э-э, точно?

Я бы просто программатором залил в EEPROM нужный бинарник, а читал бы по указателю.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

codenamehawk писал(а):
Misha119 писал(а): если я вот так напишу:

Код: Выделить всё

eeprom char eepromrom [2][8] ={{0x28, 0xB4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC5}, {0x28, 0x31, 0xC5, 0xB8, 0x0, 0x0, 0x0, 0xB9}};
то будет при каждом включении перезаписываться еепром
Не будет каждый раз переписываться. Компилятор создаст для еепром файл с вашими данными, а вы с ним будете делать что захотите.
компилятор создаст, в контроллер будет залит хекс и еепром, но ведь в коде строчка объявления инициализированного массива будет, и я думаю что будет перезапись

а как по указателю считать данные?
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

а как по указателю считать данные?
Зависит от компилятора. В GCC нужно использовать спецфункции __eeprom_read_byte() / __eeprom_write_byte(), IAR, по-моему, делает это прозрачно, так что, наверное, можно написать что-то типа

Код: Выделить всё


eeprom uint8_t * b;
uint8_t x;

...

b=1;

x=(*b);

я думаю что будет перезапись
В таких случаях не надо думать. Надо либо почитать мануал, либо посмотреть дизассемблер.
Последний раз редактировалось YS Сб июн 20, 2015 20:42:41, всего редактировалось 1 раз.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

А что помешает прочитать их с еепром?
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

а в codevision avr как считать данные массива?
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

А что помешает прочитать их с еепром?
EEPROM в AVR - другое адресное пространство.
а в codevision avr как считать данные массива?
С CVAVR не работал.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

codenamehawk мне надо сверить массив и массив с еепрома
вот, и если удалить строку где объявляется массив в еепроме то пишет не объявленная переменная
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

codevision с массивом вроде работает(считывает), как обычно.
А вот присвоив переменной новое значение, codevision автоматом запишет в еепром.

Попробуйте объявить массив без присваивания значений.
eeprom char eepromrom [2][8];

Во избежание путаницы адресов в еппром создавайте отдельные переменные или структуры.
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

codenamehaw если объявить без присвоения значений, то компилятор не ругается
но вот не затрутся ли прошлые значения массива при включении контроллера на нули или FF ?
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Не должны затереться, но проблема с адресами в еппром может возникнуть.
При добавлении новой переменной в еепром, компилятор может переместить предыдущую переменную в другое место, поэтому
codenamehawk писал(а): Во избежание путаницы адресов в еппром создавайте отдельные переменные или структуры.
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

не совсем догоняю что за отдельные переменные?
Вымогатель припоя
Сообщения: 542
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Примерно так
eeprom char dannyje1;
eeprom char dannyje2;
eeprom char dannyje3;
eeprom char dannyje4;
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Сообщение Misha119 »

предположим я создал несколько таких переменных вместо массива, потом вдруг добавляется ещё переменная и опять может быть путаница, или я не прав?
Ответить

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