Александр К. 0 23 октября, 2009 Опубликовано 23 октября, 2009 · Жалоба Нужно записывать данные в eeprom AVR по конкретным адресам, используя CodeVisionAVR. #include <mega16.h> eeprom unsigned int *point; void main(void) { } Нужно задать значение point, а затем по этому адресу записать данные. Как это пишется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Как-то так: #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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр К. 0 24 октября, 2009 Опубликовано 24 октября, 2009 (изменено) · Жалоба Так не получается. Ошибка: Error: ...: missing '(' В строчке const eeprom_const_adr1=0x10; Изменено 24 октября, 2009 пользователем Александр К. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Извиняюсь,попробуйте так: const int eeprom_const_adr1=0x10; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр К. 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Теперь другая ошибка: 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; В англицком я не силён ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goodefine 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Попробуйте эти функции: #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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Ну и нафига здесь эти функции? Все это кодвижин делает в фоне при записи/чтении данных из 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; } Но имхо,это дурдом.А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру? Или это домашнее задание урока по программингу? ЗЫ.Какая у вас версия компилятора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр К. 0 24 октября, 2009 Опубликовано 24 октября, 2009 (изменено) · Жалоба ...Вроде так должно работать:... Работает. Спасибо. ...А зачем вам нужны фиксированные адреса,не лучше-ли довериться линкеру? Нужно результат работы программы разместить в eeprom в виде нескольких массивов так, чтобы знать, где что. Массив поэлементно как записать? Версия 2.03.4 Standard. Goodefine, попробую. Изменено 24 октября, 2009 пользователем Александр К. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Работает. Спасибо. Нужно результат работы программы разместить в 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]; или в цикле записывать,если у вас уже есть готовый массив. Или я не понял вашей задачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр К. 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Адрес первого элемента какой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Адрес первого элемента какой? Дык енумерация-же-какой укажете,такой и будет :laughing: flash enum type_mydata {AAA=xxx,BBB,....,BLA-BLA-BLA}mydata_type; как в первом варианте-по дефолту с нулевого начинается. Вы-бы какой-нить справочник по Сям почитали-бы или Ритчи,например... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр К. 0 24 октября, 2009 Опубликовано 24 октября, 2009 · Жалоба Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться