Мой код 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

Обсуждение

Всем спасибо. все, что мне нужно было сделать, это избавиться от функции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


4 ответа


Лучший ответ:

3

В вашем коде есть ряд проблем, помимо фактической ошибки:

  • Вы делите 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


0

Я не вижу ваш код, но я предполагаю, что вы передаете беззнаковое значение в round().

millis() возвращает unsigned long, это означает, что оно никогда не может быть отрицательным, поэтому, если вы проверите millis() >= 0, оно всегда будет истинным. Это ваша проблема.

Напишите собственную функцию раунда, которая не проверяет, что ее значение больше 0.

,

Я не думаю, что это ошибка, это просто предупреждение. Настоящая проблема заключается в следующем: (.text+0x0): множественное определение `__vector_7' (ошибка ссылки), @Michel Keijzers


0

просто несколько предупреждений о небезопасных/ненадежных фрагментах кода.

основной проблемой (потенциально неразрешимой) является ошибка вектора-7. вы должны сначала заглянуть в таблицу данных, чтобы увидеть, к какому вектору прерывания он относится. В вашем коде объявлено несколько таких ISR.

,

как мне это исправить, @Rowan Radosav - McRae


0

Я искал, но не смог найти ответ, затем я внезапно отключил внешнее питание Arduino, что вызвало эту проблему. Когда я отключил внешнее питание, я смог установить его на свое устройство. Я надеюсь, что это работает для вашей проблемы.

,