Skip to main content
  1. Posts/
  2. blog.dsinf.net/

C++ na AVR (Arduino), makro ISR i błąd multiple definition of `__vector_XYZ’

·134 words·1 min
blog.dsinf.net arduino avr c++ hardware
Daniel Skowroński
Author
Daniel Skowroński

Przy przeorganizowywaniu kodu na Arduino z procesorem AVR w którym wykorzystuję makro ISR (do obsługi przerwań systemowych) umieściłem je w pliku nagłówkowym (.h) co wyrzuciło mi malowniczy i (jak zwykle) nic nie mówiący błąd kompilatora “multiple definition of `__vector_11-”.

Oczywiście jawnie nigdzie nie użyłem __vector_11, mój kod nie woła także nigdzie indziej przerwań. Okazało się, że biblioteka do obsługi układu DHT11 której używam wykorzystuje millis() i inne funkcje powiązane z timerem systemowym żeby nie czytać z portu szybciej niż urządzenie da radę. Po przesunięciu mojego wywołania makra do pliku z kodem konflikt zmiennych wektorowych przestaje istnieć - nie udało mi się znaleźć konkretnej ku temu przyczyny, ale zapewne jest to spowodowane momentem rozwijania makr i wynikających z tego nazw im przypisywanych.

W każdym razie na arduino pomaga umieszczenie marka w pliku z kodem (.cpp)