我尝试从 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;
}
}
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