Конфликт библиотек

Vassabi
Offline
Зарегистрирован: 18.02.2012

Пытаюсь создать скетч используя следующие библиотеки:

#include <IRremote.h>
#include <RotaryEncoder.h>

При этом скетч не грузится, вылазит ошибка:

RotaryEncoder\RotaryEncoder.cpp.o: In function `__vector_9':
C:\Documents and Settings\Андрей\Рабочий стол\arduino-0022\libraries\RotaryEncoder/RotaryEncoder.cpp:87: multiple definition of `__vector_9'
IRremote\IRremote.cpp.o:C:\Documents and Settings\Андрей\Рабочий стол\arduino-0022\libraries\IRremote/IRremote.cpp:264: first defined here
core.a(main.cpp.o): In function `main':

Как это поправить?

step962
Offline
Зарегистрирован: 23.05.2011

 В одной из библиотек замените все вхождения "__vector_9" на, например, "__vector_09" (не только в c/cpp-файле, но и в *.h). Есть весьма незначительная вероятность, что это поможет (незначительная, потому что этим дело скорее всего не ограничится.  Вылезут еще конфликты совместно используемых вводов/выводов и пр.) 

Vassabi
Offline
Зарегистрирован: 18.02.2012

Нет там `__vector_9'

step962
Offline
Зарегистрирован: 23.05.2011

 Даже в 87-й строчке?

ЗЫ: Посмотрел исходники - в RotaryEncoder c 87-й строки начинается обработчик прерывания по переполнению таймера/счетчика 2:

ISR(TIMER2_OVF_vect)
{
    RotaryEncoder::isr();
}

Это 9-й вектор в таблице прерываний ATMega328. Значит, "__vector_9" - это системная переменная (или константа). И значит - обе библиотеки используют этот вектор для своих целей. Выходов - три (по крайней мере):

1) Переписать любую из библиотек на использование прерывания по переполнению таймера/счетчика 1 (таймер/счетчик 0 трогать нельзя - это священная корова, на нем вся система отсчета времени в Arduino держится)

2) Переписать обе библиотеки, переключив обработку прерывания 9 в них на свой собственный обработчик прерываний.

3) Искать другие библиотеки, которые не будут конфликтовать между собой.

Судя по поставленному вопросу, вы сможете осилить вариант 3. Так что - ищите...

Vassabi
Offline
Зарегистрирован: 18.02.2012

Спасибо! Буду искать библиотеки.