ARDUINO Помогите подружить библиотеки на digispark'е

poliackovandrew

✩✩✩✩✩✩✩
10 Мар 2022
2
0
Столкнулся с проблемой, хочу сделать контроллер для ПК на базе 2х нано и дигиспарка для общения с компом. Должно все это общаться по I2C, одна из ардуинок начальник, а другая и дигиспарк рабы. Проблема такая: не хотят совместно работать библиотеки TinyWire и TrinketHidCombo, а они тут очень нужны. Ругается вся эта кака на __vector_2, как понял они обе на него ссылаются.
Текст ошибки:
In file included from C:\Users\Andrew\Documents\Arduino\libraries\TrinketHidCombo\usbdrvasm_includer.S:24:0:
C:\Users\Andrew\Documents\Arduino\libraries\TrinketHidCombo\usbdrv/usbdrvasm.S:17:0: warning: "__SFR_OFFSET" redefined [enabled by default]
 #define __SFR_OFFSET 0      /* used by avr-libc's register definitions */
 ^
In file included from c:\users\andrew\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5\avr\include\avr\io.h:99:0,
                 from C:\Users\Andrew\Documents\Arduino\libraries\TrinketHidCombo\cmdline_defs.h:26,
                 from C:\Users\Andrew\Documents\Arduino\libraries\TrinketHidCombo\usbdrvasm_includer.S:22:
c:\users\andrew\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.8.1-arduino5\avr\include\avr\sfr_defs.h:141:0: note: this is the location of the previous definition
 #    define __SFR_OFFSET 0x20
 ^
libraries\TinyWire-master\twi.cpp.o: In function `__vector_2':
C:\Users\Andrew\Documents\Arduino\libraries\TinyWire-master/twi.cpp:822: multiple definition of `__vector_2'
libraries\TrinketHidCombo\usbdrvasm_includer.S.o:C:\Users\Andrew\Documents\Arduino\libraries\TrinketHidCombo\usbdrv/usbdrvasm165.inc:40: first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Digispark (Default - 16.5mhz).
Сюда еще нужно будет прикручивать DigiKeyboard и DigiMouse либо использовать TrinketHidCombo, там вроде тоже есть такие функции.

Прошу помочь и объяснить, направить на истинный путь.

Спасибо!
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
@poliackovandrew, __vector_2 - обработчик прерывания PCINT0_vect. Т.е. TinyWire и TrinketHidCombo используют для работы один и тот же обработчик. Как вариант можно попробовать переделать инициализацию TinyWire в функции void Twi_slave_init(uint8_t slave_addr) чтобы оно работало от обработчика INT0. В самом обработчике необходимо будет сменить вектор на INT0_vect. Кроме того, в этом обработчике необходимо будет сразу разрешить прерывания, чтобы не заблокировать работу usb драйвера.
Как настроить прерывание написано в документации на МК.
 
  • Лойс +1
Реакции: poliackovandrew

poliackovandrew

✩✩✩✩✩✩✩
10 Мар 2022
2
0
@Kir, спасибо больше за ответ, хотелось бы ещё у вас спросить, библиотека TinyWire это нормальный выбор, просто я убил часа 2, пока искал подходящую.