Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Вопрос по EEPROM

Непрочитано 01.11.2010, 16:29  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Вопрос по EEPROM

дорогие друзья!

Записываю и читаю информацию в ЕЕПРОМ в CVAVR.Наблюдаю в ПРОТЕУС . Все нормально но,
когда перегружаю контроллер и вновь записываю информауию, запись начинается опять с нулевой ячейки, а мне нужно добавить и не потерять старую запись. у меня такой вопрос:
как можно записать информацию в ЕЕПРОМ ( в CVAVR )с определенного адреса и после записи получить дрес последней ячейки записи ,чтобы потом, в нужный момент ,продолжить запись уже из полученного нового адреса?
Извиняюсь если вопрос тривиальный ,но сам не смог справится, хотя приложил не мало усилии.
Заранее благодарен.
Реклама:
begun вне форума  
Непрочитано 01.11.2010, 16:34  
OlegNZH
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

"Global variables can be stored at specific SRAM and EEPROM locations at design-time using the @ operator."
например eeprom float b @0x10;
OlegNZH вне форума  
Непрочитано 01.11.2010, 17:18  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

OlegNZH спасибо ,конечно, но у меня его то не получается.
Задал глобальную пееменную :
char b =0x22;
в прерывание пишу
eeprom char b @ 0.12;
выдает ошибку
может не так понял ?
begun вне форума  
Непрочитано 01.11.2010, 17:24  
OlegNZH
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

@0x10; это Адрес , куда размещается. В какую ячейку памяти.Точнее- с Какой Ячейки (Данные имеют Разную длину)

Последний раз редактировалось OlegNZH; 01.11.2010 в 17:27.
OlegNZH вне форума  
Непрочитано 01.11.2010, 18:03  
sersne
Прописка
 
Регистрация: 09.11.2009
Сообщений: 193
Сказал спасибо: 47
Сказали Спасибо 58 раз(а) в 26 сообщении(ях)
sersne на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

Цитата:
Данные имеют Разную длину
данные уже опеделены и имеют длинну char - 0..255.

На сколько я понял нужено записать массив данных, может быть подойдет что то типа этого:
eeprom char d[256];
В d[0] записать элемент массива с которого начинается новая запись, а данные писать начиная с d[1]. После перезагрузки в d[0] находится последний элемент массива данных, прочитать его и записать новые данные начиная с элемента массива расположенного в d[0];

Последний раз редактировалось sersne; 01.11.2010 в 18:07.
sersne вне форума  
Непрочитано 01.11.2010, 18:47  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

sersne,
да, к примеру ,нужно записать массив данных в ЕЕПРОМ.
есть массивы ланных:
unsigned char r1[]={0x22,0x33,0x45}
unsigned char r2[]={0x12,0x23,0x34}
нужно записать с перва r1[] a потом, после перегрузки, r2[]
и расположить их в ЕЕПРОМ последовательно т. е. так:
0x22,0x33,0x45,0x12,0x23,0x34
естественно ,предварительно заказываем место в ЕЕПРОМ
eeprom unsigned char e[6];

затем пишем
char c;
FOR(c=0;c‹3;c++)
e[c]=r1[c];
как же будет выглядеть продолжение кода если нужно после перегрузки
r[2] записать рядом с r[1] ,ведь нулевая ячейка толко одна и в ней можно записать одно число ?
begun вне форума  
Непрочитано 01.11.2010, 19:39  
sersne
Прописка
 
Регистрация: 09.11.2009
Сообщений: 193
Сказал спасибо: 47
Сказали Спасибо 58 раз(а) в 26 сообщении(ях)
sersne на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

unsigned char r1[]={0x22,0x33,0x45} //данные 1
unsigned char r2[]={0x12,0x23,0x34} //данные 2

eeprom char test = {0x00}; // здесь будет храниться информация какие именно данные хотим записать. при прошивке eeprom он должен быть равен какому то одному значению.

eeprom unsigned char e[6]; // массив

main:
char c;

if (test = 0x00)
{
FOR(c=0;c‹3;c++)
e[c]=r1[c];
}
if (test = 0x01)
{
FOR(c=0;c‹3;c++)
e[c+3]=r2[c];
}

...


где то в программе перед перезагрузкой придется программно менять значение test;

Последний раз редактировалось sersne; 01.11.2010 в 22:30.
sersne вне форума  
Непрочитано 01.11.2010, 19:54  
k0stya_
Временная регистрация
 
Регистрация: 23.09.2007
Адрес: Кривой Рог, Украина
Сообщений: 55
Сказал спасибо: 34
Сказали Спасибо 34 раз(а) в 20 сообщении(ях)
k0stya_ на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

Можно в первой ячейке EEPROM сохранять адрес последней свободной ячейки после процедуры записи данных. Таким образом можно даже вычислять размер данных записаных в EEPROM...
k0stya_ вне форума  
Непрочитано 01.11.2010, 20:03  
sersne
Прописка
 
Регистрация: 09.11.2009
Сообщений: 193
Сказал спасибо: 47
Сказали Спасибо 58 раз(а) в 26 сообщении(ях)
sersne на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

Сообщение от k0stya_ Посмотреть сообщение
Можно в первой ячейке EEPROM сохранять адрес последней свободной ячейки после процедуры записи данных. Таким образом можно даже вычислять размер данных записаных в EEPROM...
Я это и предлогал сделать, но begun определил два массива данных которые должны будут записываться в один массив в eeprom. Это самый простой способ.
sersne вне форума  
Непрочитано 01.11.2010, 21:19  
begun
Гражданин KAZUS.RUN
 
Регистрация: 18.07.2006
Сообщений: 894
Сказал спасибо: 244
Сказали Спасибо 31 раз(а) в 28 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: Вопрос по EEPROM

да, вроде кое что проясняется ,но не понятно ,как определить ту самую последную нулевую ячейку который нужно запомнить?
begun вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC16f684 и EEPROM Sergey_ritm Микроконтроллеры, АЦП, память и т.д 19 27.02.2011 19:33
Помогите с EEPROM 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 55 18.10.2010 22:28
Интересный вопрос - два усилителя к одной нагрузке eCAH Аудиотехника 45 14.10.2010 01:23
Вопрос по блоку питания... El-Shang Источники питания и свет 13 19.11.2009 17:35
[Решено] Проблема с eeprom в Proteus Memfis666 Proteus, KiCAD и другие ECAD 1 01.10.2009 15:38


Часовой пояс GMT +4, время: 07:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.