roboforum.ru

Технический форум по робототехнике.

Taimer0 mega8 Чтото торможу

Taimer0 mega8 Чтото торможу

Tracer » 14 дек 2006, 14:39

Толи лыжи не едут толи Я ... :о)

Timer0 Mega8 WinAVR
МК влетает в прерывание по таймеру и сидит там
Где я торможу?

Вот кусок кода
...
unsigned int msDelay;

//Системный таймер (Timer0) 1мс для временных отсчетов задержки и тайм-аутов

void SysTimerInit(unsigned char tnum) //************ Timer Init
{
   if(tnum==0)
    {
     TCCR0 = _BV(CS02); //Прескаллер = 64
     TIMSK = _BV(TOIE0); //Прерывания от Timer0 разрешены
     TCNT0 = 0xB8; //Загрузка начального значения
     TCCR0 = 0x02; //Разрешить таймер
     }
}


ISR(TIMER0_OVF_vect)//*********************** Timer INTERRUPT
{
    TCNT0 = 0xB8; //Перегрузка счетчика для нового счета 1мс
    if(msDelay)   msDelay--;
    if(rxTimeOut) rxTimeOut--;
}

//************************************************ DELAY
unsigned char Delay(unsigned int msD)
{
msDelay=msD;
while(msDelay){};
return(0);
}

avr123.nm.ru » 14 дек 2006, 14:55

посмотрите в VMLAB.    vmlab.nm.ru

Tracer » 14 дек 2006, 14:59

avr123.nm.ru писал(а):посмотрите в VMLAB.    vmlab.nm.ru


Вот и меня терзают смутные сомнения что Студия мне мозги парит
Прийдется ставить и разбираться с Лабой :о(

avr123.nm.ru » 14 дек 2006, 15:08

уверен - не пожалеете.

avr123.nm.ru » 14 дек 2006, 15:09

смотрите примеры которые идуn с прогой - там есть и с  WinAVR  и  примеры курса тоже.

Tracer » 16 дек 2006, 03:39

РАЗОБРАЛСЯ :о)

"Ну блин ВЫ даете" (С) Генерал

Оказалось это ВСЕ издержки включенной оптимизации -Оs

в функции задержки происходило следующее
msDelay -> R24 R25
R24 сравнивался с 0

В прерывании происходило следующее
push R24 R25 - запомнить в стеке
R24--  Декремент
pop R24 R25 - достали из стека
IRET
с переходом на.. (нервных дальше прошу не читать :о))

R24 сравнивается с 0


Я в ШОКЕ

Отключил оптимизацию все стало на свои места

avr123.nm.ru » 16 дек 2006, 03:52

попробуй CVAVR

Tracer » 16 дек 2006, 19:35

А что в CVAVR нет своих прибамбасов.
Какая разнца на чем писать - идеальных компиляторов НЕТ.
И не будет :о)

Если уж сильно припрет напишу на АСМе

avr123.nm.ru » 16 дек 2006, 19:43

вот я и говорю - попробуйте.

avr123.nm.ru » 16 дек 2006, 19:44

копия.
Последний раз редактировалось avr123.nm.ru 17 дек 2006, 02:45, всего редактировалось 1 раз.

Tracer » 17 дек 2006, 01:37

Ок обязательно попробую для сравнения
Спасибо за совет

aesok » 18 дек 2006, 01:56

Есть одно волшебое слово - volatile.

Прочтите avr-libc-user-manual FAQ#1 - My program doesn’t recognize a variable updated within an interrupt routine

Анатолий.

aesok » 18 дек 2006, 01:56

Есть одно волшебое слово - volatile.

Прочтите avr-libc-user-manual FAQ#1 - My program doesn’t recognize a variable updated within an interrupt routine

Анатолий.

Tracer » 18 дек 2006, 12:48

ПРОВЕРИЛ - ВСЕ РАБОТАЕТ

СПАСИБО за подсказку, действительно ВОЛШЕБНОЕ слово :о)

avr123.nm.ru » 18 дек 2006, 14:15



Rambler\'s Top100 Mail.ru counter