Совет по оптимизации: Код
unsigned char EEPromRead( unsigned int Addr ) { unsigned char data;
macroGlobalIntDisable; // на тот случай если в каком-нибудь прерывании между // следующими двумя строками кода поменяется // содержимое EEAR //Setup adress register EEAR=(Addr&0xFF); //start EEPOM read by writing EERE SetBit(EECR,0); data = EEDR; macroGlobalIntEnable; //Return data from Data register return data; }
void EEPromWrite( unsigned int Addr, unsigned char Val ) { macroToggleWatchdog; while(EECR&(1<<EEPE)){}; // Это лучше делать здесь, а не в конце, // т. к. не всегда пишутся два байта подряд macroGlobalIntDisable;
// а ещё лучше записать так: // for (;;) // { // macroGlobalIntDisable; // if (EECR&(1<<EEPE)) // macroGlobalIntEnable; // else // break; // } // в этом случае нахождение системы в состоянии // с запрещёнными прерываниями будет минимальным // Этот цикл желательно также вставить в начало // функции EEPromRead вместо macroGlobalIntDisable
EEAR = Addr; // Load address EEDR = Val; // Load data to be written //Set logical one to EEMPE SetBit(EECR,2); //Set logical one to EEPE SetBit(EECR,1); macroGlobalIntEnable; return; }
|