Извините, бес попутал.
xdata - это конечно же оперативная память.
Код
// адрес, куда сохранить значение во флэше
#define a_v5 0xf3a8
// во флэш-памяти
code int c_v5 _at_ a_v5;
// в оперативке
xdata int v5 = 2;
void WriteFlash(void)
{
char xdata EA_save=EA;
EA=0;
SFRPAGE = 0x00;
FLSCL=0x21;
PSCTL=1;
*((int xdata*)a_v5)=(int)v5;
// тут дальше аналогичный код для других переменных...
PSCTL=0;
FLSCL=0x20;
EA=EA_save;
}
void ReadFlash(void)
{
char xdata EA_save=EA;
EA=0;
SFRPAGE = 0x00;
FLSCL=0x21;
v5 = (int)c_v5; // <- вот в этом месте портится значение переменной v5
FLSCL=0x20;
EA=EA_save;
}
Когда пользователь решил изменить эту переменную, он вводит значение в v5,
после этого вызывается WriteFlash, пишущий это значение по определенному адресу во флэш-память. При включении прибора вызывается функция ReadFlash,
копирующая из флэш в оперативку все переменные.
Сообщение отредактировал jdhfdg - Sep 26 2011, 08:10