0

我最近遇到了ShiftPWM,它经过优化以使用移位寄存器控制 RGB LED。

我下载了源代码并且能够运行我的面包板上提供的示例没有问题。我什至稍微调整了草图,并且使用 ShiftPWM 库中的函数感觉很舒服。

我想在我正在处理的当前项目中包含 ShiftPWM 功能,该项目已经有大量的库文件。我想#include "ShiftPWM.h进入我的Registers.h文件,这样我就可以使用自己的语法和面向对象的层次结构来点亮我的 LED。

在示例 arduino 草图中,我需要在包含 ShiftPWM 库文件之前定义一些常量:

#define SHIFTPWM_NOSPI
const int ShiftPWM_latchPin = 2;
const int ShiftPWM_dataPin  = 4;
const int ShiftPWM_clockPin = 3;
const bool ShiftPWM_invertOutputs = true;
const bool ShiftPWM_balanceLoad = false;
#include "ShiftPWM.h" 

所以我想我可以简单地将这些行Registers.h以及用于点亮 LED 的设置代码和其他函数复制到我的文件中。

但是,当我这样做并尝试编译仅包含 的 arduino 草图时Registers.h,我的编译器给了我以下(缩写)错误:

multiple definitions of '__vector_11'
.../ShiftPWM/ShiftPWM.h:175 first defined here
multiple definitions of 'ShiftPWM'
.../ShiftPWM/ShiftPWM.h:175 first defined here

它所指的行是这样的:

ISR(TIMER1_COMPA_vect) {
    ShiftPWM_handleInterrupt();
}

我的研究表明,这行代码与 arduino 用来运行中断的计时器有关。例如,当人们尝试运行 arduino Servo 和 Tone 库时,经常会收到“__vector_11 的多个定义”错误,因为他们都尝试使用 timer1。

我想知道为什么我只是通过尝试从我自己的自定义库链接到 ShiftPWM 库来得到这个错误。在我的代码中,我没有手动设置任何类型的计时器。我假设它源于一些链接问题,但我真的无法弄清楚那可能是什么。

任何帮助表示赞赏。

4

0 回答 0