Timer 硬件定时器、定时器中断、端口中断等。。。未为ESP8266定义
我有一个ESP8266 NodeMCU 12E开发板。我正在尝试实现一个ISR,它使用硬件计时器,如所述。这篇博文最初是为ESP32编写的,它提供了我无法在Arduino IDE中为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
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中编译时未声明或定义。在互联网上,我似乎找不到其他人遇到同样的问题。你知道我如何解决这个问题吗?谢谢