gpt4 book ai didi

c++ - 无法使用 Atmel 寄存器编译 Arduino 代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:23 28 4
gpt4 key购买 nike

我正在使用安装了 Arudino 扩展的 VSCode 编辑器。基本上,我有一个简单的程序,我在其中调用一个函数,该函数将设置一个 5 毫秒的计时器,然后运行。但是,在编辑器中,我收到错误:

“错误:‘OCR3A’未在此范围内声明”

关于如何修复它的任何想法?

我应该注意到智能感知可以看到寄存器的定义。我也在使用 Arduino Uno R3 开发板。另外,这是代码:

void isr_int1(void) {
if(TCCR3B == 0)// Debug code if the timer is not running
{
startTimerValue = millis();

TCNT3 = 0;
OCR3A = 5000;
sei();

bitSet(TCCR3B, WGM32);
bitSet(TCCR3B, CS31);
bitSet(TIMSK3, OCIE3A);

detachInterrupt(1);
}
}

ISR(TIMER3_COMPA_vect)
{
TCCR3A = 0;
TCCR3B = 0
TCNT3 = 0;
OCR3A = 0;

lcd.setCursor(0,0);
lcd.print(millis() - startTimerValue);

attachInterrupt(1, isr_int1, FALLING);
}

void loop()
{
isr_int1();
}

最佳答案

主要问题是 Arduino UNO 没有 Timer/Counter 3,因为它使用 ATMega328A。例如,T/C 3 可用于 Adruino Micro/Leonardo(基于 ATMega32U4)和 Arduino MEGA 2560(ATMega2560)。

而且不同的 MCU 也可能有不同的寄存器名称。这就是为什么 Arduino Core 充满了 #ifdefs

您也可能会因为目标 MCU 错误而收到这些错误。

至少它通常与 MCU 数据表中使用的寄存器名称完全对应。当您尝试自己配置某些东西时,这也是您应该首先研究的地方。

关于c++ - 无法使用 Atmel 寄存器编译 Arduino 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382556/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com