Timer 硬件定时器、定时器中断、端口中断等。。。未为ESP8266定义

Timer 硬件定时器、定时器中断、端口中断等。。。未为ESP8266定义,timer,esp8266,isr,Timer,Esp8266,Isr,我有一个ESP8266 NodeMCU 12E开发板。我正在尝试实现一个ISR,它使用硬件计时器,如所述。这篇博文最初是为ESP32编写的,它提供了我无法在Arduino IDE中为ESP8266编译的最终演示代码 volatile int interruptCounter; int totalInterruptCounter; hw_timer_t * timer = NULL; portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; v

我有一个ESP8266 NodeMCU 12E开发板。我正在尝试实现一个ISR,它使用硬件计时器,如所述。这篇博文最初是为ESP32编写的,它提供了我无法在Arduino IDE中为ESP8266编译的最终演示代码

volatile int interruptCounter;
int totalInterruptCounter;

hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR onTimer() {
  portENTER_CRITICAL_ISR(&timerMux);
  interruptCounter++;
  portEXIT_CRITICAL_ISR(&timerMux);

}

void setup() {

  Serial.begin(115200);

  timer = timerBegin(0, 80, true);
  timerAttachInterrupt(timer, &onTimer, true);
  timerAlarmWrite(timer, 1000000, true);
  timerAlarmEnable(timer);

}

void loop() {

  if (interruptCounter > 0) {

    portENTER_CRITICAL(&timerMux);
    interruptCounter--;
    portEXIT_CRITICAL(&timerMux);

    totalInterruptCounter++;

    Serial.print("An interrupt as occurred. Total number: ");
    Serial.println(totalInterruptCounter);

  }
}
当我尝试编译时,我会得到错误,比如hw_timer_t、portENTER_CRITICAL、portEXIT_CRITICAL、timerAttachInterrupt、timerAlarmWrite等等。。。一切都不存在

我应该导入一些库来支持这个演示代码吗


我似乎找不到ESP8266的硬件定时器。每个人似乎都在谈论ESP32的硬件定时器

之所以没有定义它们,是因为它们位于ESP32 SDK中,而ESP32 SDK与ESP8266完全不同(不同的CPU、不同的指令集、不同的操作系统)。有关ESP32的文档不适用于ESP8266

看看-这是ESP8266 Arduino SDK构建的“操作系统”。它包括对硬件计时器的调用(
hw\u timer\u init()
hw\u timer\u arm()
hw\u timer\u set\u func()
)。你可以找到它的文档

注意,ESP8266还有一个“免费RTO”。当您搜索示例代码时,人们通常不清楚他们的代码是用于非OS SDK还是免费RTOS SDK


免费RTOS是一个独立的软件;您将无法在Arduino SDK程序中使用其函数。有些人已经使用ArduinoSDK运行了部分程序,但这是一个很深的兔子洞,可能会浪费你很多时间。如果你决定这样做,最好放弃Arduino SDK调用,只编写一个合适的FreeRTOS程序。

在我的
C:\Users\john\Documents\ArduinoData\library.json文件中,我看到了一个
http://downloads.arduino.cc/libraries/github.com/feilipu/FreeRTOS-10.0.0-1.zip
。我在该文件中没有看到对NonosSDK的引用。我的编译器还抱怨没有定义
hw\u timer\u init()、FRC1\u SOURCE等等。你认为这意味着我的董事会是个自由人吗?切换到NonosSDK版本容易吗?不,这是为Arduinos设计的,不是ESP8266。NONOS-SDK不是一个单独的库,您不需要下载它,它也不会列在library.json中。ESP8266 Arduino框架基于此。你没有使用免费的实时操作系统。目前,我仍然得到一些错误,如hw_timer_init()、FRC1_SOURCE等。。。在我尝试在Arduino IDE中编译时未声明或定义。在互联网上,我似乎找不到其他人遇到同样的问题。你知道我如何解决这个问题吗?谢谢