Работа eeprom в AVR.
- Реклама
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
КОМПЭЛ вроде поставляет.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
приветствую
возник вопрос как сделать так чтобы записать массив данных в еепром и больше в него не записывать(а просто считывать), дабы не уменьшать количество циклов записи еепрома, контроллер будет часто обестачиваться
если я вот так напишу:
то будет при каждом включении перезаписываться еепром, а я хочу один раз только записать, как это сделать?
а если я например вот так объявлю массив, то всё равно будут элементы записываться при старте контроллера?
возник вопрос как сделать так чтобы записать массив данных в еепром и больше в него не записывать(а просто считывать), дабы не уменьшать количество циклов записи еепрома, контроллер будет часто обестачиваться
если я вот так напишу:
Код: Выделить всё
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 раз.
после первого включения слить еепром, удалить строчку из программы и залить все обратно.
второй вариан проверить ячейку памяти если там не FF пропустить запись...
второй вариан проверить ячейку памяти если там не FF пропустить запись...
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
думал об этом, но при удалении строчки с объявлением массива компилятор сразу ругается что не объявлен массив(у меня в коде с него данные считываются)Mishany писал(а):после первого включения слить еепром, удалить строчку из программы и залить все обратно.
- Реклама
- Сообщения: 542
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Не будет каждый раз переписываться. Компилятор создаст для еепром файл с вашими данными, а вы с ним будете делать что захотите.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 писал(а):приветствую
возник вопрос как сделать так чтобы записать массив данных в еепром и больше в него не записывать(а просто считывать), дабы не уменьшать количество циклов записи еепрома, контроллер будет часто обестачиваться
если я вот так напишу:то будет при каждом включении перезаписываться еепром, а я хочу один раз только записать, как это сделать?Код: Выделить всё
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];
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Э-э-э, точно?будет при каждом включении перезаписываться еепром
Я бы просто программатором залил в EEPROM нужный бинарник, а читал бы по указателю.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
компилятор создаст, в контроллер будет залит хекс и еепром, но ведь в коде строчка объявления инициализированного массива будет, и я думаю что будет перезаписьcodenamehawk писал(а):Не будет каждый раз переписываться. Компилятор создаст для еепром файл с вашими данными, а вы с ним будете делать что захотите.Misha119 писал(а): если я вот так напишу:то будет при каждом включении перезаписываться еепромКод: Выделить всё
eeprom char eepromrom [2][8] ={{0x28, 0xB4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC5}, {0x28, 0x31, 0xC5, 0xB8, 0x0, 0x0, 0x0, 0xB9}};
а как по указателю считать данные?
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Зависит от компилятора. В 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
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
EEPROM в AVR - другое адресное пространство.А что помешает прочитать их с еепром?
С CVAVR не работал.а в codevision avr как считать данные массива?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
codenamehawk мне надо сверить массив и массив с еепрома
вот, и если удалить строку где объявляется массив в еепроме то пишет не объявленная переменная
вот, и если удалить строку где объявляется массив в еепроме то пишет не объявленная переменная
- Сообщения: 542
- Зарегистрирован: Вт фев 09, 2010 17:52:26
codevision с массивом вроде работает(считывает), как обычно.
А вот присвоив переменной новое значение, codevision автоматом запишет в еепром.
Попробуйте объявить массив без присваивания значений.
eeprom char eepromrom [2][8];
Во избежание путаницы адресов в еппром создавайте отдельные переменные или структуры.
А вот присвоив переменной новое значение, codevision автоматом запишет в еепром.
Попробуйте объявить массив без присваивания значений.
eeprom char eepromrom [2][8];
Во избежание путаницы адресов в еппром создавайте отдельные переменные или структуры.
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
codenamehaw если объявить без присвоения значений, то компилятор не ругается
но вот не затрутся ли прошлые значения массива при включении контроллера на нули или FF ?
но вот не затрутся ли прошлые значения массива при включении контроллера на нули или FF ?
- Сообщения: 542
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Не должны затереться, но проблема с адресами в еппром может возникнуть.
При добавлении новой переменной в еепром, компилятор может переместить предыдущую переменную в другое место, поэтому
При добавлении новой переменной в еепром, компилятор может переместить предыдущую переменную в другое место, поэтому
codenamehawk писал(а): Во избежание путаницы адресов в еппром создавайте отдельные переменные или структуры.
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
- Сообщения: 542
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Примерно так
eeprom char dannyje1;
eeprom char dannyje2;
eeprom char dannyje3;
eeprom char dannyje4;
eeprom char dannyje1;
eeprom char dannyje2;
eeprom char dannyje3;
eeprom char dannyje4;
- Сообщения: 192
- Зарегистрирован: Пт май 15, 2015 22:13:00
предположим я создал несколько таких переменных вместо массива, потом вдруг добавляется ещё переменная и опять может быть путаница, или я не прав?


