Всем здравствуйте.
Нужна помощь в следующем вопросе:
Начинаю программировать в WinAVR для Atmega8515.
Имеется простейшая программа:
CODE
typedef struct {
char pass[8];
} password;
#define _NUM_OF_PASS (10)
#define _PASS_START (_NUM_OF_PASS + sizeof(char))
char numberOfPass = 0;
char numberOfChar = 0;
ISR(SIG_UART_RECV) //По прерыванию получаю по байту.
{
char temp;
temp = UDR;
//newpas.pass[numberOfChar] = temp;
//UDR = numberOfChar;
numberOfChar++; //Накапливаю счетчик
}
int main()
{
USART_init();
SREG |= (1 << 7);
while(1)
{
if (numberOfChar == 8) // Когда набрал 8 байт
{
numberOfChar = 0; //Обнуляю
numberOfPass++; // Накапливаю другой счетчик
eeprom_write_block( &numberOfPass, _NUM_OF_PASS, sizeof(char));//Записываю его в память
char numTemp;
eeprom_busy_wait();
eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));//Читаю его же обратно,
//для провеки
UDR = numberOfPass; //И посылаю на комп второй счетчик
_delay_ms(500);
}
}
}
void USART_init()
{
UCSRA = 0;
UCSRB |= (1 << 7) | (1 << 4) | (1 << 3);
//UCSRB |= (1 << 4) | (1 << 3);
UCSRC |= (1 << 7);
UCSRC |= (1 << 1) | (1 << 2);
UCSRC -= 128;
UBRRH = 0;
UBRRL = 47;
}
Получаю:
1234567, на восьмой раз не плучаю ничего, потом опять 01234 и т.д.
Если закомментить строку
eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));
то все нормально.
Объясните пожалуйста, где я
[CENSORED]?
Сообщение отредактировал IgorKossak - Mar 25 2010, 18:50