Доброго всем времени суток.
Пишу довольно большой проект, собственно поскольку он большой то писал его частями и все части в отдельности работают,
Но вот когда начал собирать все в один проект на последнем этапе вышла проблема, а именно конфликт используемых библиотек с библиотекой Servo
Получаю вот такую ошибку.
На сколько я понимаю возникает конфликт использования одинаковых таймеров.
У меня в коде используются следующие библиотеки
И я использую таймеры 3,4,5
На сколько я знаю Servo использует таймер1, но это для Nano например, а вот для Mega не пойму что она пытается использовать.
Если открыть код библиотеки, то находим очень интересный код
И я не могу понять, какой именно таймер она использует.
Собственно вопросы:
1. Как понять какой из таймеров использует библиотека и от чего это зависит?
2. Как указать библиотеке использовать конкретный таймер? ( пробовал добавлять строчку #define _useTimer1 - не помогает)
Пишу довольно большой проект, собственно поскольку он большой то писал его частями и все части в отдельности работают,
Но вот когда начал собирать все в один проект на последнем этапе вышла проблема, а именно конфликт используемых библиотек с библиотекой Servo
Получаю вот такую ошибку.
ошибка:
Arduino: 1.8.7 (Windows 10), Плата:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_32'
sketch\Max_K_Antenna2_ramps.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
c:/users/user/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/../lib/gcc/avr/7.3.0/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_42'
sketch\Max_K_Antenna2_ramps.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount':
(.text+0x0): multiple definition of `__vector_47'
sketch\Max_K_Antenna2_ramps.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Mega or Mega 2560.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
На сколько я понимаю возникает конфликт использования одинаковых таймеров.
У меня в коде используются следующие библиотеки
C++:
#include <Wire.h>
#include <EEManager.h>
//#define _useTimer1
#include <Servo.h>
#include <GyverTimers.h>
#include <FIFO.h>
#include <GStypes.h>
#include <GyverPlanner.h>
#include <GyverPlanner2.h>
#include <GyverStepper.h>
#include <GyverStepper2.h>
#include <StepperCore.h>
#include <EEPROM.h>
На сколько я знаю Servo использует таймер1, но это для Nano например, а вот для Mega не пойму что она пытается использовать.
Если открыть код библиотеки, то находим очень интересный код
C++:
// Say which 16 bit timers can be used and in what order
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define _useTimer5
#define _useTimer1
#define _useTimer3
#define _useTimer4
typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t;
Собственно вопросы:
1. Как понять какой из таймеров использует библиотека и от чего это зависит?
2. Как указать библиотеке использовать конкретный таймер? ( пробовал добавлять строчку #define _useTimer1 - не помогает)