Начинать надо с того, что из EEPROM считывание идет побайтно. Значит ваши указатели должны быть указателями на байт. К слову, sizeof() также возвращает размер объекта в байтах. Поскольку исходный массив у вас в словах, надо воспользоваться явным приведением указателей:
Код
unsigned char *ptr_win, *ptr_win_ee, i;
ptr_win = (unsigned char *)win; // указатель на массив тождественен указателю на его нулевой элемент,
// поэтому более короткая запись вместо &win[0]
ptr_win_ee = (unsigned char *)win_ee;
do
{
EEAR = (unsigned int)(ptr_win_ee++);
EECR |= (1<<EERE);
*ptr_win++ = EEDR;
}
while(++i < sizeof(win)); // массив явно ненулевого размера, поэтому используем более эффективный цикл do {} while()
Если компилятор IAR, то все проще:
Код
unsigned char *ptr_win;
__eeprom unsigned char *ptr_win_ee;
unsigned char i = 0;
ptr_win = (unsigned char *)win;
ptr_win_ee = (__eeprom unsigned char *)win_ee;
do
{
*ptr_win++ = *ptr_win_ee++;
}
while(++i < sizeof(win));
Цитата(SZ0 @ Aug 23 2008, 12:23)

Т.к. в указателях адрес. А то что один адрес на еепром указывает, IAR не телепат

К компилятору обычно должен быть прил
ажен программист, который четко скажет компилятору, что этот указатель на данные в eeprom

Цитата(SZ0 @ Aug 23 2008, 12:23)

Применение while(i < (size_w/2)) в таком виде ведёт к лишним затратам, т.к. size_w/2 постоянно обрабатывается в цикле.
Так выкиньте лишнюю переменную и используйте в цикле sizeof(win)/2, которое вычисляется на этапе компиляции. Хотя, если включена оптимизация, компилятор должен вынести деление на 2 из цикла даже если size_w передается как параметр в функцию.
А еще эффективнее перейти к циклу do {} while (--i):
Код
ptr_win = (unsigned char *)win;
ptr_win_ee = (__eeprom unsigned char *)win_ee;
unsigned char i = sizeof(win);
do
{
*ptr_win++ = *ptr_win_ee++;
}
while(--i);
Еще одна уловка: если будете использовать цикл с поэлементным (не побайтным) копированием, то лучше вместо sizeof(win)/2 сразу писать sizeof(win)/sizeof(win[0]) - это позволит не менять исходник этого кода если вдруг придется изменить размер элемента массива.