Не могу скомпилировать код Arduino с регистрами Atmel - PullRequest
2 голосов
/ 27 марта 2019

Я использую редактор VSCode с установленным расширением Arudino.По сути, у меня есть простая программа, в которой я вызываю функцию, которая устанавливает таймер на 5 мс, а затем запускается.Однако в редакторе я получаю сообщение об ошибке:

"ошибка: 'OCR3A' не был объявлен в этой области"

Есть мысли о том, как это исправить?

Следует отметить, что intellisense может видеть определения для регистров.Я также использую плату 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();
}

1 Ответ

0 голосов
/ 28 марта 2019

Основная проблема заключается в том, что Arduino UNO не имеет Timer/Counter 3, поскольку использует ATMega328A.T/C 3 доступен, например, для Adruino Micro / Leonardo (на основе ATMega32U4) и Arduino MEGA 2560 (ATMega2560).

И разные MCU также могут иметь разные имена регистров.Вот почему ядро ​​Arduino заполнено #ifdefs

Также вы можете получить эту ошибку из-за неверного целевого MCU.

По крайней мере, оно обычно полностью соответствует именам регистров, используемых в таблице данных MCU.Это также первое место, где вы должны учиться, когда пытаетесь что-то настроить самостоятельно.

...