Мой код Arduino компилируется, когда я не вижу в нем ничего плохого
Постоянно выдает ошибку:
Error compiling for board Arduino/Genuino Mega or Mega 2560.
Другие скетчи работают нормально, а этот не компилируется, хотя у меня есть все библиотеки.
Вот ссылка на код: https://drive.google.com/open?id=0B3R5NMiGZ3RPSk9WS0Y1amtEYms
Полная ошибка:
Arduino: 1.8.3 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_13'
libraries\IRLibRecv\IRLibRecv.cpp.o (symbol from plugin):(.text+0x0): first defined here
d:/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
collect2.exe: error: ld returned 1 exit status
exit status 1 Error compiling for board Arduino/Genuino Mega or Mega
2560.
This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
@, 👍-2
Обсуждение4 ответа
Лучший ответ:
В вашем коде есть ряд проблем, помимо фактической ошибки:
- Вы делите unsigned long на целое число, в результате чего получается unsigned long, а затем округляете его. Не имеет смысла.
- Вы присваиваете (я полагаю, не видя вашего кода, я не могу быть уверен) длинные константы (например,
0xFFE01F
) целому числу, которое переполняется и скулит.
Однако ваша основная проблема заключается в том, что у вас есть две подпрограммы обслуживания прерываний (ISR) для одного и того же прерывания (вектор 7). Что это за прерывание, я не могу сказать, так как оно отличается на разных чипах, и вы, похоже, не можете решить, используете ли вы Uno или Mega (по какой-то причине вы отметили свой вопрос оба) . Поэтому вам придется изменить код и/или библиотеки, чтобы использовать разные прерывания, или объединить их вместе, чтобы использовать только один ISR.
следует ли мне изменить int 'holdDown' на long?, @Rowan Radosav - McRae
Да. Еще лучше, uint32_t., @Majenko
что такое uint32_t. ?, @Rowan Radosav - McRae
и как мне исправить векторные ошибки?, @Rowan Radosav - McRae
Я не вижу ваш код, но я предполагаю, что вы передаете беззнаковое значение в round()
.
millis()
возвращает unsigned long, это означает, что оно никогда не может быть отрицательным, поэтому, если вы проверите millis() >= 0
, оно всегда будет истинным. Это ваша проблема.
Напишите собственную функцию раунда, которая не проверяет, что ее значение больше 0.
Я не думаю, что это ошибка, это просто предупреждение. Настоящая проблема заключается в следующем: (.text+0x0): множественное определение `__vector_7' (ошибка ссылки), @Michel Keijzers
просто несколько предупреждений о небезопасных/ненадежных фрагментах кода.
основной проблемой (потенциально неразрешимой) является ошибка вектора-7. вы должны сначала заглянуть в таблицу данных, чтобы увидеть, к какому вектору прерывания он относится. В вашем коде объявлено несколько таких ISR.
как мне это исправить, @Rowan Radosav - McRae
Я искал, но не смог найти ответ, затем я внезапно отключил внешнее питание Arduino, что вызвало эту проблему. Когда я отключил внешнее питание, я смог установить его на свое устройство. Я надеюсь, что это работает для вашей проблемы.
- Кнопка двойного состояния Nextion
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Запуск двух шаговых двигателей с двумя поворотными энкодерами
- Как управлять 6 серводвигателями с помощью платы Arduino Mega?
- Программирование пользовательских Arduino Mega с Arduino Uno
- Перепрограммировать Atmega 16u2 на Arduino Mega с помощью Arduino IDE?
- Arduino 1.6.4 не показывает никаких /tty/ опций в последовательных портах
- Использование библиотеки Arduino fix_fft или arduinoFFT для фильтрации определенного звука?
Всем спасибо. все, что мне нужно было сделать, это избавиться от функцииtone()., @Rowan Radosav - McRae
пс. есть ли способ, которым я все еще могу его использовать?, @Rowan Radosav - McRae
Ссылка больше не работает, поэтому ваш вопрос не принесет особой пользы другим. Вот почему всегда лучше включать в *вопрос* код, а не *ссылку*. Если решением было удалить функциюtone(), почему бы вам не опубликовать это в качестве ответа, объяснив, почему это помогло исправить ваш код?, @Greenonline
@Greenonline Этой теме почти 2 года..., @Rowan Radosav - McRae
Есть вопросы по [Электротехнике](https://electronics.stackexchange.com/questions?sort=newest&page=2350), которым **10** лет, и которые *все еще* полезны... Я наткнулся на ваш вопрос Пока я искал решение проблемы, которая у меня возникла, но это было не так полезно, как *могло* быть. Это все, что я говорю... :-), @Greenonline
Как я могу вам помочь? Я какое-то время не пользовался Arduino, но, возможно, смогу чем-то помочь., @Rowan Radosav - McRae
Это была простая ошибка компиляции, сейчас я ее исправил, спасибо :-), @Greenonline