-=Женек=- 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Господа, пытасюь записать массив в eeprom, прочитать его и вывести на экран. Выводятся нули. Вот код. Где я не прав? #include <mega32.h> #include <delay.h> #include <stdlib.h> #include <stdio.h> #include <disp.h> #define MAX_DEVICES 5 #define SEARCH_ROM 0xF0 #define DS1990_FAMILY_CODE 1 //Global vaiable defination unsigned char devices; // 1 Wire Bus functions #asm .equ __w1_port=0x12;PORTD .equ __w1_bit=2 #endasm #include <1wire.h> unsigned char rom_code[MAX_DEVICES,9]; u08 variable; ui16 textcolor; // color of text ui16 backcolor; // color of background ui16 varvar; unsigned char str; unsigned char i,j,a,b,c,d; unsigned long serial; eeprom unsigned char E_rom_code[5,9]; unsigned char eeprom *ptr_to_eeprom; unsigned char *ptr_to_ram; unsigned char rom_code2[MAX_DEVICES,9]; void main(void) { backcolor=0xBDF7; textcolor=blue; DDRA.0=1; PORTA.0=1; DDRD.2=0; lcd_init(); lcd_clr(); fill_screen(0xbdf7); for (i=0;i<5;i++) //Заполняю массив { for (j=0;j<9;j++) { rom_code[i][j]=i; } } for (i=0;i<5;i++) //Вывожу содержимое массива в левую часть экрана { for (j=0;j<9;j++) { lcd_setxy(10+j*7,120-i*20); lcd_str_ram(rom_code[i][j],f8x14, textcolor); } } ptr_to_ram=rom_code; // Записываю переменную rom_code в eeprom ptr_to_eeprom=E_rom_code; while (*ptr_to_ram) *ptr_to_eeprom++=*ptr_to_ram++; // copy the string e from EEPROM to // the string r in RAM ptr_to_eeprom=E_rom_code; // читаю из eeprom в новый массив rom_code2 ptr_to_ram=rom_code2; while (*ptr_to_eeprom) *ptr_to_ram++=*ptr_to_eeprom++; for (i=0;i<5;i++) // Вывожу в правую чать экрана содержимое rom_code2 { for (j=0;j<9;j++) { lcd_setxy(100+j*7,120-i*20); lcd_str_ram(rom_code2[i][j],f8x14, textcolor); //выводятся нули } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Какая EEPROM? Почему вы с ней как с RAM обращаетесь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=Женек=- 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба У меня ATMega32, в дальнейшем будет ATTiny26. ПЛатформа - Codevision есть переменная unsigned char rom_code[5,9]. Как ее записать и как ее прочитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба У меня ATMega32 С атмегами не работал. Тем не менее, во всех МК EEPROM является "специальной" памятью, с которой надо работать совсем не так, как с RAM. Читайте даташит стр.18-19. Для записи в EEPROM и чтения из нее вам надо обращаться в регистры EEARH, EEARL, EEDR и EECR. А в вашем коде я что-то не вижу, чтобы вы к ним обращались. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=Женек=- 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Это Codevision. Он якобы заботится обо всем сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Это Codevision. Он якобы заботится обо всем сам. А-а. Ну тогда и обращайтесь в ихний тексуппорт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба Это Codevision. Он якобы заботится обо всем сам. Наверное сначала ему надо как-то сказать о том, что переменная расположена в eeprom, а не просто unsigned char rom_code[5,9]. Должно быть какое-то волшебное слово, типа unsigned char eeprom rom_code[5,9] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=Женек=- 0 1 мая, 2010 Опубликовано 1 мая, 2010 · Жалоба А есть разница между вариантами записи unsigned char eeprom rom_code[5,9] и eeprom unsigned char rom_code[5,9] ?? P.S. проблему решил поставив галку "preserve EEPROM" в настройках программирования. ВРодебы что-то получается, продолжаю экспериментировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
e_one 0 3 мая, 2010 Опубликовано 3 мая, 2010 (изменено) · Жалоба в codeVisionAVR проще записать eeprom unsigned char rom_code[MAX_DEVICES,9]; и переменная unsigned char rom_code[MAX_DEVICES,9]; будет находится в eeprom Дальнейшая работа с переменной, как с обычной. Изменено 3 мая, 2010 пользователем e_one Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 4 мая, 2010 Опубликовано 4 мая, 2010 · Жалоба Отстаньте от EEPROM'а. Здесь и сам алгоритм копирования принципиально не подходит для копирования таких данных, и название функции "lcd_str_ram" подсказывает, что оно принимает скорее строку, чем то что ей отдают тут... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 5 мая, 2010 Опубликовано 5 мая, 2010 · Жалоба P.S. проблему решил поставив галку "preserve EEPROM" в настройках программирования. Ну ясен перец, эту галку всегда надо ставить первым делом. Программа может быть правильная или нет, но сам процесс заливки новой версии программы без этой галки сотрет EEPROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться