Собственный обработчик прерывания

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Пользую ino 1.0 Пытаюсь в скетче использовать собственный обработчик для T0

/** Обработчик прерывания таймера по переполнению.
ISR(TIMER0_OVF_vect)
{
...
...
...
}

При попытке скомпилить ругается:

core.a(wiring.c.o): In function `__vector_16':
D:\arduino\hardware\arduino\cores\arduino/wiring.c:49: multiple definition of `__vector_16'

Кто то пользует прерывания акромя тех что умеет штатный attachinterrupt() ?

axill
Offline
Зарегистрирован: 05.09.2011

Probelzaelo пишет:

Пользую ino 1.0 Пытаюсь в скетче использовать собственный обработчик для T0

/** Обработчик прерывания таймера по переполнению.
ISR(TIMER0_OVF_vect)
{
...
...
...
}

При попытке скомпилить ругается:

core.a(wiring.c.o): In function `__vector_16':
D:\arduino\hardware\arduino\cores\arduino/wiring.c:49: multiple definition of `__vector_16'

Кто то пользует прерывания акромя тех что умеет штатный attachinterrupt() ?

раз уж пишите на ардуине то зачем пытаетесь поперек нее думать? используйте attachInterrupt

будет работать так же как вы хотите

а вот настройку таймера и флагов прерывания можно сделать напрямую через регистры МК

maksim
Offline
Зарегистрирован: 12.02.2012

Дело в том что этот таймер и обработчик заняты для работы функций millis(), micros(), delay().

Посмотрете файлы C:\Users\Мария\Desktop\Дуина\arduino-1.0\hardware\arduino\cores\arduino\ wiring.c и main.cpp.

Используйте другой таймер (например 2),а если вам нужен именно нулевой таймер, то используйте следующую конструкцию:

#define F_CPU 16000000UL  
#include <util/delay.h>

int main()
{
   // тут все то что в setup();

  while(1)
  {
     // тут все то что в loop();
     
     // для примера функции задержек:
    _delay_ms (1000);  // милисекунды
    _delay_us (100);  // микросекунды
  }
}

ISR(TIMER0_OVF_vect)
{

}

естественно вышеупомянутые дуиновские функции перестанут работать. Так же можете переписать wiring.c под другой таймер, для фунционирования дуино-функций.