Arduino IDE с ошибкой ATtiny85 «множественное определение `__vector_5»
У меня возникла проблема с компиляцией кода для моей схемы ATtiny85.
Я использую timer/counter0 в обычном режиме, поэтому при его переполнении срабатывает ISR TIMER0_OVF_vect. Когда у меня есть этот ISR в моем коде, он не компилируется и выдает эту ошибку:
wiring.c.o (symbol from plugin): In function `__vector_5':
(.text+0x0): multiple definition of `__vector_5'
sketch\Glove_heater_v1.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board ATtiny25/45/85.
Может быть, мне просто нужно использовать другое имя для ISR?
My Code:
//Красный светодиод на PB0
//Синий светодиод на PB1
//Кнопка PB2
// Делитель напряжения батареи PB3
//Управление МОП-транзистором PB4
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
volatile uint8_t checkVoltage = 0;
void setup() {
DDRB = 0b0010011; //установить PB0,PB1,PB4 как выход, PB2,PB3 как вход
PORTB = 0b00000011; // устанавливаем PB0, PB1 HIGH, чтобы светодиоды были выключены, а остальные контакты были LOW
//Настройка TC0 для триггера прерывания по переполнению
TCCR0B |= 0b00000101; //clk/1024 прескалер
TIMSK |= 0b00000010; //установить TOIE0 для разрешения прерывания от переполнения
sei();
}
void loop() { // ничего не делаем в этом тестовом коде
}
ISR(TIMER0_OVF_vect){ //Таймер/счетчик 0 прерывает проверку напряжения
checkVoltage = 1;
}
Любые идеи приветствуются!
@Eric Navarrete, 👍2
Обсуждение1 ответ
Лучший ответ:
Сообщение об ошибке:
wiring.co [...]: несколько определений `__vector_5'
Glove_heater_v1.ino.cpp.o [...]: впервые определено здесь
__vector_5
равно TIMER0_OVF_vect
. Итак, у вас есть одно определение этого
ISR в вашем скетче и еще один в проводке.c. Эта проводка.c является частью
ядра Ардуино. Как пишет КИЕВ в комментарии, он использует
TIMER0_OVF_vect
для учета времени (millis()
, micros()
и
delay()
).
У вас есть два варианта решения этой проблемы:
- вы можете использовать другой таймер (Таймер 1) в своем скетче и оставить Таймер 0 для ядра Arduino
- поскольку вы все равно не используете ядро Arduino, вы можете избавиться от него
просто определив
main()
в вашем скетче вместоsetup()
ипетля()
.
Ах, я вижу, большое спасибо за объяснение. В финальном коде используются оба таймера, поэтому в данном случае я не буду использовать ядро Arduino., @Eric Navarrete
- Возникли проблемы с определением CTC на таймере 1 с помощью ATTiny85.
- Программирование сервопривода на ATtiny85
- Digispark ATtiny 85 - не распознается как HID устройство
- Генерация сигнала частотой 38 кГц без таймеров
- Клавиатура Digispark ATtiny85
- ATtiny85 AC Phase Control для регулировки яркости лампочки
- Digispark Micro (ATTINY85) не работает на Macbook Pro 2016 г.
- Как выйти из прерывания таймера (ISR(TIMER1_COMPA_vect))
Arduino использует его для подсчета миллисекунд., @KIIV