Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь с eeprom.h
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
CheGuevaravlc
Всем здравствуйте.

Нужна помощь в следующем вопросе:

Начинаю программировать в 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]?
Злодей
volatile char numberOfChar = 0;
_Pasha
Цитата(CheGuevaravlc @ Mar 25 2010, 22:24) *

Вы [censored], полагая, что задержки по 500мс и записи в eeprom при запрещенных прерываниях очень помогают в работе прерывания УАРТа. Скажу по секрету, что так никто не делает
Злодей
А чем плоха задержка в 500мс, она что, запрещает прерывания?
CheGuevaravlc
Цитата(Злодей @ Mar 26 2010, 04:43) *
volatile char numberOfChar = 0;

А поясните пожалуйста, что это значит? И как это влияет?

Цитата(_Pasha @ Mar 26 2010, 07:56) *
Вы [censored], полагая, что задержки по 500мс и записи в eeprom при запрещенных прерываниях очень помогают в работе прерывания УАРТа.

Задержка там стоит скорее от безысхдности. smile.gif Вообще, уарту это помогает, кажтся. Хотя спорить не буду. А где я запрещаю прерывания?
Сергей Борщ
Цитата(CheGuevaravlc @ Mar 26 2010, 08:50) *
А поясните пожалуйста, что это значит? И как это влияет?

volatile
Нажмите для просмотра прикрепленного файла

Цитата(CheGuevaravlc @ Mar 25 2010, 20:24) *
Код
    eeprom_busy_wait();
    eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));//Читаю его же обратно,
Первая строка лишняя. В исходниках eerd_block.S видно, что это действие выполняется перед операцией чтения, т.е. в начале eeprom_read_block():
Код
1:    sbic    _SFR_IO_ADDR (EECR), EEWE
    rjmp    1b
CheGuevaravlc
Цитата(Сергей Борщ @ Mar 26 2010, 12:46) *

Так или иначе, не помогло.

Объясните, как вообще операция может изменять переменную, не имеющую к ней никакого отношения, да еще и не каждый раз?
Да, гугл я уже спрашивал.
_Pasha
Цитата(CheGuevaravlc @ Mar 25 2010, 22:24) *
Код
#define _NUM_OF_PASS (10)
********************************
eeprom_write_block( &numberOfPass, _NUM_OF_PASS, sizeof(char));//Записываю его в память
eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));//Читаю его же обратно,

Нашел. Просто, вероятно, никто не захотел разгадывать заднепроходные лабиринты. Каков смысл приведенных действий, лучше разберитесь сами. smile.gif
CheGuevaravlc
Цитата(_Pasha @ Mar 26 2010, 18:42) *
Каков смысл приведенных действий, лучше разберитесь сами. smile.gif


Проверить, нормально ли все работает. Ответ: нет. Самый простой пример, чтобы работать с еепром. Дальше, можно добавлять до бесконечности. Но если он даже так не работает?
_Pasha
Цитата(CheGuevaravlc @ Mar 27 2010, 09:38) *
Но если он даже так не работает?

Курим мануал по avr-libc.
И смотрим, какие параметры переданы в функциях, и удивляемся, какую чушь написали.
Все.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.