реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Запись в eeprom, ... используя CodeVisionAVR
Александр К.
сообщение Oct 23 2009, 20:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Нужно записывать данные в eeprom AVR по конкретным адресам, используя CodeVisionAVR.
Код
#include <mega16.h>
eeprom unsigned int *point;
void main(void)
{

}

Нужно задать значение point, а затем по этому адресу записать данные. Как это пишется?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 24 2009, 06:59
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Как-то так:

Код
#include <mega16.h>

const  eeprom_const_adr1=0x10;
const  eeprom_const_adr2=0x11;    
eeprom unsigned int   *point;

void main(void)
{
  unsigned int temp;

point=eeprom_const_adr1;
//в eeprom по адресу 0x10 записываем 5
*point=5;

point=eeprom_const_adr2;
temp=0x1234;
//в eeprom по адресу 0x11 записываем 0x1234
*point=temp;
}
Причина редактирования: Оформление цитаты исходника.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 24 2009, 08:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Так не получается. Ошибка: Error: ...: missing '('
В строчке const eeprom_const_adr1=0x10;

Сообщение отредактировал Александр К. - Oct 24 2009, 08:51
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 24 2009, 10:09
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Извиняюсь,попробуйте так:
const int eeprom_const_adr1=0x10;


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 24 2009, 12:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Теперь другая ошибка: Error: a value of type 'const int' can't be assigned to an entity of type 'eeprom unsigned int *'
В строках point=eeprom_const_adr1 и point=eeprom_const_adr2;
В англицком я не силён ...
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Oct 24 2009, 13:34
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Попробуйте эти функции:
Код
#define EERE     0
#define EEWE    1
#define EEMWE  2

//чтение eeprom:
unsigned char readEEPROM (unsigned int addr)
        {
        unsigned char data = 0;
        while (EECR&(1<<EEWE);        
        EEAR = addr;      
        EECR|=1<<EERE;
        EECR&=~(1<<EERE);
        data = EEDR;
        return data;
        }

// запись байта data в EEPROM по заданному адресу
void writeEEPROM (unsigned int addr, unsigned char data)
        {
        while (EECR&(1<<EEWE);
        EEAR = addr;
        EEDR = data;
        EECR|=1<<EEMWE;
        EECR|=1<<EEWE;
        }


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 24 2009, 14:57
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Ну и нафига здесь эти функции? Все это кодвижин делает в фоне при записи/чтении данных из eeprom.
2 Топикстартер:Честно говоря,я никогда не размещал данные в eeprom по фиксировонному адресу через указатель.
Вроде так должно работать:

Код
eeprom  unsigned int data1 @0x10;
eeprom  unsigned int data2 @0x20;
eeprom unsigned  int *point;
void main(void)
{
point=&data1;
*point=0x1234;
point=&data2;
*point=0x5678;
}

Но имхо,это дурдом.А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру?
Или это домашнее задание урока по программингу?
ЗЫ.Какая у вас версия компилятора?
Причина редактирования: Оформление цитаты исходника.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 24 2009, 15:49
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Цитата(WHALE @ Oct 24 2009, 18:57) *
...Вроде так должно работать:...

Работает. Спасибо.
Цитата(WHALE)
...А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру?

Нужно результат работы программы разместить в eeprom в виде нескольких массивов так, чтобы знать, где что.
Массив поэлементно как записать?
Версия 2.03.4 Standard.

Goodefine, попробую.

Сообщение отредактировал Александр К. - Oct 24 2009, 15:57
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 24 2009, 16:09
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Александр К. @ Oct 24 2009, 19:49) *
Работает. Спасибо.
Нужно результат работы программы разместить в eeprom в виде нескольких массивов так, чтобы знать, где что.
Массив поэлементно как записать?

А в чем данном случае проблема?Пишите поэлементно по индексу.
Как-то так:

Код
const unsigned char size_array_eeprom   50
eeprom unsigned int mydata[size_array_eeprom];
flash enum type_mydata {AAA,BBB,....,BLA-BLA-BLA}mydata_type;
mydata[AAA]=XXX;
mydata[BLA-BLA-BLA]=xxxx;
и читайте соответсвенно:
unsigned int mydata_aaa;
mydata_aaa=mydata[AAA];


или в цикле записывать,если у вас уже есть готовый массив.
Или я не понял вашей задачи?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 24 2009, 16:20
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Адрес первого элемента какой?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Oct 24 2009, 16:40
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Александр К. @ Oct 24 2009, 20:20) *
Адрес первого элемента какой?

Дык енумерация-же-какой укажете,такой и будет laughing.gif
flash enum type_mydata {AAA=xxx,BBB,....,BLA-BLA-BLA}mydata_type;
как в первом варианте-по дефолту с нулевого начинается.
Вы-бы какой-нить справочник по Сям почитали-бы или Ритчи,например...


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Александр К.
сообщение Oct 24 2009, 16:44
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 12-11-06
Из: Волгоград
Пользователь №: 22 235



Спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 23:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01458 секунд с 7
ELECTRONIX ©2004-2016