Arduino - 8266 中断问题

在8266packages版本升级到2.5.2以上使用中断历程会出现复位


中断问题.png

翻译:
为ESP8266做ISR的正确方法是将它放在IRAM中 - 而不是让它从闪存中执行。第二种选择大部分时间都可以工作,但是不可靠,几年前我发现这很困难 我偶尔会发生ISR崩溃。添加ICACHE_RAM_ATTR解决了这个问题:它将ISR置于IRAM中,不再发生随机崩溃。

2.5.2以前版本可用历程

uint8_t GPIO_Pin = D2;
 
void setup() {
 Serial.begin(115200);
 attachInterrupt(digitalPinToInterrupt(GPIO_Pin), IntCallback, RISING);
}
 
void loop() {
  delay(500);
}
 
void IntCallback(){
 Serial.println("123456");

2.5.2以后版本需要增加 ICACHE_RAM_ATTR标识 例:

uint8_t GPIO_Pin = D2;

void  ICACHE_RAM_ATTR IntCallback();

void setup() {
 Serial.begin(115200);
 attachInterrupt(digitalPinToInterrupt(GPIO_Pin), IntCallback, RISING);
}
 
void loop() {
  delay(500);
}
 
void IntCallback(){
 Serial.println("123456");

你可能感兴趣的:(Arduino - 8266 中断问题)