错误“'timer0_pin_port'”和“'_vector_13'”的原因是什么?

时间:2018-11-25 22:12:42

标签: c++ arduino

#include "IRremote.h"

int receiver = 11;

IRrecv irReceiver(receiver);
decode_results results;

void setup() {
  // put your setup code here, to run once:
pinMode(buttonPinA, INPUT_PULLUP);
pinMode(buttonPinB, INPUT_PULLUP);
pinMode(buttonPinC, INPUT_PULLUP);
pinMode(buttonPinD, INPUT_PULLUP);
irReceiver.enableIRIn();
}

错误消息是:

  

Tone.cpp.o(插件的符号):在函数“ timer0_pin_port”中:

     

(。text + 0x0):“ __ vector_13”的多个定义

     

libraries \ IRremote \ IRremote.cpp.o(插件的符号):(。text + 0x0):   首先在这里定义

     

c:/程序文件   (x86)/ arduino / hardware / tools / avr / bin /../ lib / gcc / avr / 4.9.2 /../../../../ avr / bin / ld.exe:   禁用松弛:不适用于多个定义

     

collect2.exe:错误:ld返回1个退出状态

     

退出状态1 为板Arduino / Genuino Mega或Mega编译时出错   2560。

我最近发现“ tone”和“ IRremote”命令使用here中的timer2。我不知道什么是timer2以及如何更改它。

1 个答案:

答案 0 :(得分:0)

此错误是链接问题。两段库代码都声明了具有相同名称的内容(在这种情况下,这是一个计时器)。

所以编译就可以了,现在链接程序将已编译的输出打包到可执行文件中。每次您看到诸如error: ld returned ...之类的错误消息时,都知道这是链接问题,而不是语法问题。 ld是链接程序(“ ld”是链接程序的名称)。

如此处所述:

https://forum.arduino.cc/index.php?topic=120955.msg2613823#msg2613823

编辑头文件IRRemote.h并更改库使用的计时器中断:

更改选择:

#define IR_USE_TIMER1   // tx = pin 9
// #define IR_USE_TIMER2     // tx = pin 3

例如:

// #define IR_USE_TIMER1   // tx = pin 9
#define IR_USE_TIMER2     // tx = pin 3