Я работаю над проектом своего колледжа, который должен хранить данные в EEPROM AtMega32. Я могу записывать и читать данные в любом конкретном месте памяти. Но когда я пытаюсь записать данные последовательно с адреса от 0 до 1023, я получаю неправильные значения.
Вот функции, которые я написал.
Определение функции для чтения и записи данных
#include "eeprom.h"
uint8_t EEPROMRead(uint16_t uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
void EEPROMWrite(uint16_t uiAddress, uint8_t ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
Вот основная функция
static int epadr=0;
epread=EEPROMRead(epadr); //reading from address stored in epadr
printf("%d",epread); //printing values
if(epadr<=1023)
{
EEPROMWrite(epadr,high); //writing at address stored in epadr
epadr++; //increment address
}
}
if(epadr>1023)
printf("Memory Full\n");
Я хочу хранить данные от 0 до 1023. Скажите, пожалуйста, что не так с этим кодом.
EEAR
,EECR
иEEDR
и т. д.? - person Dai   schedule 17.10.2016epadr
? Вы полагаетесь на нулевую инициализацию переменных длительности статического хранения? Это плохая практика, особенно во встроенных системах, которые часто имеют нестандартный код запуска, который пропускает нулевую инициализацию. - person Lundin   schedule 17.10.2016static int epadr; epadr=0;
? - person Lundin   schedule 17.10.2016if(epadr<=1023)
пишет только по адресу 0, а не от 0 до 1023, да? Нет петли. - person Lundin   schedule 17.10.2016a=adc_read(0); _delay_ms(10); a-=81; check=a; if (check>high) { high=check; if(epadr<=1023) { EEPROMWrite(epadr,high); epadr++; } } if(epadr>1023) drawString("Mem Full",10,250,2,BLACK);
- person Ravi Sharma   schedule 17.10.2016