Собственный обработчик прерывания
- Войдите на сайт для отправки комментариев
Вс, 16/06/2013 - 01:34
Пользую 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() ?
Пользую 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
будет работать так же как вы хотите
а вот настройку таймера и флагов прерывания можно сделать напрямую через регистры МК
Дело в том что этот таймер и обработчик заняты для работы функций 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 под другой таймер, для фунционирования дуино-функций.