Конфликт библиотек
- Войдите на сайт для отправки комментариев
Сб, 18/02/2012 - 19:10
Пытаюсь создать скетч используя следующие библиотеки:
#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':
Как это поправить?
В одной из библиотек замените все вхождения "__vector_9" на, например, "__vector_09" (не только в c/cpp-файле, но и в *.h). Есть весьма незначительная вероятность, что это поможет (незначительная, потому что этим дело скорее всего не ограничится. Вылезут еще конфликты совместно используемых вводов/выводов и пр.)
Нет там `__vector_9'
Даже в 87-й строчке?
ЗЫ: Посмотрел исходники - в RotaryEncoder c 87-й строки начинается обработчик прерывания по переполнению таймера/счетчика 2:
Это 9-й вектор в таблице прерываний ATMega328. Значит, "__vector_9" - это системная переменная (или константа). И значит - обе библиотеки используют этот вектор для своих целей. Выходов - три (по крайней мере):
1) Переписать любую из библиотек на использование прерывания по переполнению таймера/счетчика 1 (таймер/счетчик 0 трогать нельзя - это священная корова, на нем вся система отсчета времени в Arduino держится)
2) Переписать обе библиотеки, переключив обработку прерывания 9 в них на свой собственный обработчик прерываний.
3) Искать другие библиотеки, которые не будут конфликтовать между собой.
Судя по поставленному вопросу, вы сможете осилить вариант 3. Так что - ищите...
Спасибо! Буду искать библиотеки.