Перейти к содержанию
    

Запись в eeprom

Нужно записывать данные в eeprom AVR по конкретным адресам, используя CodeVisionAVR.

#include <mega16.h>
eeprom unsigned int *point;
void main(void)
{

}

Нужно задать значение point, а затем по этому адресу записать данные. Как это пишется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то так:

 

#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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так не получается. Ошибка: Error: ...: missing '('

В строчке const eeprom_const_adr1=0x10;

Изменено пользователем Александр К.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь другая ошибка: 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;

В англицком я не силён ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте эти функции:

#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;
        }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и нафига здесь эти функции? Все это кодвижин делает в фоне при записи/чтении данных из 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;
}

Но имхо,это дурдом.А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру?

Или это домашнее задание урока по программингу?

ЗЫ.Какая у вас версия компилятора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Вроде так должно работать:...

Работает. Спасибо.

...А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру?

Нужно результат работы программы разместить в eeprom в виде нескольких массивов так, чтобы знать, где что.

Массив поэлементно как записать?

Версия 2.03.4 Standard.

 

Goodefine, попробую.

Изменено пользователем Александр К.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работает. Спасибо.

Нужно результат работы программы разместить в 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];

 

или в цикле записывать,если у вас уже есть готовый массив.

Или я не понял вашей задачи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Адрес первого элемента какой?

Дык енумерация-же-какой укажете,такой и будет :laughing:

flash enum type_mydata {AAA=xxx,BBB,....,BLA-BLA-BLA}mydata_type;

как в первом варианте-по дефолту с нулевого начинается.

Вы-бы какой-нить справочник по Сям почитали-бы или Ритчи,например...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...