ESP32TimerInterrupt 示例无法针对 ESP32 进行编译

问题描述 投票:0回答:1

我尝试从 ESP32TimerInterrupt 库编译 TimerInterruptTest.ino 示例。我不确定,但看起来是这样,因为库更新了。

但是,当我尝试编译它时,它抛出了这个错误:

In file included from /home/nikola/Arduino/libraries/ESP32TimerInterrupt/src/ESP32TimerInterrupt.h:60,
                 from /tmp/.arduinoIDE-unsaved202491-5718-1ecd3ef.m2hi/TimerInterruptTest/TimerInterruptTest.ino:45:
/home/nikola/Arduino/libraries/ESP32TimerInterrupt/src/ESP32TimerInterrupt.hpp: In member function 'bool ESP32TimerInterrupt::setFrequency(const float&, bool (* const&)(void*))':
/home/nikola/Arduino/libraries/ESP32TimerInterrupt/src/ESP32TimerInterrupt.hpp:347:23: error: 'TIMER_BASE_CLK' was not declared in this scope
  347 |         _frequency  = TIMER_BASE_CLK / TIMER_DIVIDER;   //1000000;
      |                       ^~~~~~~~~~~~~~

exit status 1

Compilation error: exit status 1

这是我尝试编译的代码,该代码来自 ESP32TimerInterrupt 库的示例之一:



#if !defined( ESP32 )
    #error This code is intended to run on the ESP32 platform! Please check your Tools->Board setting.
#endif

// These define's must be placed at the beginning before #include "ESP32_New_TimerInterrupt.h"
// _TIMERINTERRUPT_LOGLEVEL_ from 0 to 4
#define _TIMERINTERRUPT_LOGLEVEL_     4

// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
#include "ESP32TimerInterrupt.h"

// Don't use PIN_D1 in core v2.0.0 and v2.0.1. Check https://github.com/espressif/arduino-esp32/issues/5868
// Don't use PIN_D2 with ESP32_C3 (crash)
#define PIN_D19             19        // Pin D19 mapped to pin GPIO9 of ESP32
#define PIN_D3               3        // Pin D3 mapped to pin GPIO3/RX0 of ESP32

// With core v2.0.0+, you can't use Serial.print/println in ISR or crash.
// and you can't use float calculation inside ISR
// Only OK in core v1.0.6-
bool IRAM_ATTR TimerHandler0(void * timerNo)
{
    static bool toggle0 = false;

    //timer interrupt toggles pin PIN_D19
    digitalWrite(PIN_D19, toggle0);
    toggle0 = !toggle0;

    return true;
}

bool IRAM_ATTR TimerHandler1(void * timerNo)
{
    static bool toggle1 = false;

    //timer interrupt toggles outputPin
    digitalWrite(PIN_D3, toggle1);
    toggle1 = !toggle1;

    return true;
}

#define TIMER0_INTERVAL_MS        1000
#define TIMER0_DURATION_MS        5000

#define TIMER1_INTERVAL_MS        3000
#define TIMER1_DURATION_MS        15000

// Init ESP32 timer 0 and 1
ESP32Timer ITimer0(0);
ESP32Timer ITimer1(1);

void setup()
{
    pinMode(PIN_D19, OUTPUT);
    pinMode(PIN_D3, OUTPUT);

    Serial.begin(115200);

    while (!Serial && millis() < 5000);

  delay(500);

    Serial.print(F("\nStarting TimerInterruptTest on "));
    Serial.println(ARDUINO_BOARD);
    Serial.println(ESP32_TIMER_INTERRUPT_VERSION);
    Serial.print(F("CPU Frequency = "));
    Serial.print(F_CPU / 1000000);
    Serial.println(F(" MHz"));

    // Using ESP32  => 80 / 160 / 240MHz CPU clock ,
    // For 64-bit timer counter
    // For 16-bit timer prescaler up to 1024

    // Interval in microsecs
    if (ITimer0.attachInterruptInterval(TIMER0_INTERVAL_MS * 1000, TimerHandler0))
    {
        Serial.print(F("Starting  ITimer0 OK, millis() = "));
        Serial.println(millis());
    }
    else
        Serial.println(F("Can't set ITimer0. Select another freq. or timer"));

    // Interval in microsecs
    if (ITimer1.attachInterruptInterval(TIMER1_INTERVAL_MS * 1000, TimerHandler1))
    {
        Serial.print(F("Starting  ITimer1 OK, millis() = "));
        Serial.println(millis());
    }
    else
        Serial.println(F("Can't set ITimer1. Select another freq. or timer"));

    Serial.flush();
}

void loop()
{
    static unsigned long lastTimer0 = 0;
    static unsigned long lastTimer1 = 0;

    static bool timer0Stopped         = false;
    static bool timer1Stopped         = false;

    if (millis() - lastTimer0 > TIMER0_DURATION_MS)
    {
        lastTimer0 = millis();

        if (timer0Stopped)
        {
            Serial.print(F("Start ITimer0, millis() = "));
            Serial.println(millis());
            ITimer0.restartTimer();
        }
        else
        {
            Serial.print(F("Stop ITimer0, millis() = "));
            Serial.println(millis());
            ITimer0.stopTimer();
        }

        timer0Stopped = !timer0Stopped;
    }

    if (millis() - lastTimer1 > TIMER1_DURATION_MS)
    {
        lastTimer1 = millis();

        if (timer1Stopped)
        {
            Serial.print(F("Start ITimer1, millis() = "));
            Serial.println(millis());
            ITimer1.restartTimer();
        }
        else
        {
            Serial.print(F("Stop ITimer1, millis() = "));
            Serial.println(millis());
            ITimer1.stopTimer();
        }

        timer1Stopped = !timer1Stopped;
    }
}

c timer interrupt esp32 arduino-esp32
1个回答
0
投票

même 战斗:(

在 c:\Users\Eric\Documents\Arduino\libraries\ESP32TimerInterrupt\src/ESP32TimerInterrupt.h:60 包含的文件中, 来自 C:\Users\Eric\Documents\Arduino\Debug_RGB_Relay_web_StructRGB_FanRPM3\Debug_RGB_Relay_web_StructRGB_FanRPM3.ino:39: c:\Users\Eric\Documents\Arduino\libraries\ESP32TimerInterrupt\src/ESP32TimerInterrupt.hpp: 在成员函数 'bool ESP32TimerInterrupt::setFrequency(const float&, bool (* const&)(void*))' 中: c:\Users\Eric\Documents\Arduino\libraries\ESP32TimerInterrupt\src/ESP32TimerInterrupt.hpp:347:23:错误:“TIMER_BASE_CLK”未在此范围内声明 347 | 347 _频率 = TIMER_BASE_CLK / TIMER_DIVIDER; //1000000; | ^~~~~~~~~~~~~~

退出状态1

编译错误:退出状态1

© www.soinside.com 2019 - 2024. All rights reserved.