Tone.cpp.o (symbol from plugin): In function `timer0_pin_port’

“Tone.cpp.o (symbol from plugin): In function `timer0_pin_port'”这个错误是波波在Arduino上使用IRremote库进行红外信号发射和接收的时候出现的编译错误。完整错误信息如下图所示:

IRremote库错误

相关错误信息:

  1. Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
  2. (.text+0x0): multiple definition of `__vector_7'
  3. C:\Users\Administrator\AppData\Local\Temp\arduino_build_811807\libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
  4. collect2.exe: error: ld returned 1 exit status
  5. exit status 1
  6. 为开发板 Arduino/Genuino Uno 编译时出错。

解决方法:

刚开始的时候遇到错误首先是百度和QQ群中看有没有人遇到,因为一般正常开发的类库兼容性是很好的,而且IRremote类库是Arduino开发板的首选类库,使用人数很多。然而很多人的解决方案都是说该类库与系统定时器冲突,建议更换其他类库,或者修改定时器中断。

最终经过代码排查,我发现在我的项目中用了无源蜂鸣器播放了一段音乐,其中用到了tone()函数。尝试将播放音乐的代码注释掉之后,问题得以解决。

所以IRremote冲突的确实是定时器中断,而我的项目中与之冲突的则是系统函数tone(),所以最简单的方法就是注释掉tone()函数,用MP3播放模块来取代无源蜂鸣器。

如果你是一个技术控,那么可以继续向下追踪,要么修改掉IRremote库的定时器,要么重新通过代码建立新的定时器和中断。

这是两个思路,至于第二个,等我有时间了再仔细研究。

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!