ESP8266 GPIO中断引起不断重启-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 677|回复: 4

[已解决] ESP8266 GPIO中断引起不断重启

[复制链接]
发表于 2022-5-22 11:24 | 显示全部楼层 |阅读模式
本帖最后由 lmn2005 于 2022-5-24 18:39 编辑

ESP8266 启用GPIO中断后会引起不断重启,打印内容:
rl\0l恟$鈔 ?l?b|帎抮b?b騨nlnnb bp?blrlp騨 ?l ? b n鈔?? b尿nn'l?l`?nn $`nr帓抧 rr抈p騨? r?b  b n鈔  b尿nn' l`?nn $`nr帓抧 rl`r拻n rl`? 宭?l`鼈n抈ISR not in IRAM!

User exception (panic/abort/assert)
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Abort called

>>>stack>>>

ctx: cont
sp: 3fffff00 end: 3fffffc0 offset: 0000
3fffff00:  feefeffe feefeffe feefeffe 3ffef33c  
3fffff10:  000000fe 00000000 00000000 00000000  
3fffff20:  00000000 00000000 00000000 00ff0000  
3fffff30:  5ffffe00 5ffffe00 0001c200 3ffee564  
3fffff40:  00000000 00000002 0000000d 40201dae  
3fffff50:  40100489 00000001 3ffee4fc 40201dc0  
3fffff60:  00000000 00000001 0000000d 402022fd  
3fffff70:  00000000 feefeffe feefeffe feefeffe  
3fffff80:  3fffdad0 00000000 3ffee550 4020239c  
3fffff90:  3fffdad0 00000000 3ffee550 402010f5  
3fffffa0:  feefeffe feefeffe feefeffe 4020193c  
3fffffb0:  feefeffe feefeffe 3ffe85d8 40100d45  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------



#define LED_Pin 4            
#define K1_Pin 13
uint8  led=0;
void keyscan() // GPIO输入中断函数
{
  if (analogRead(K1_Pin) == LOW)
  {
    delay(20);
    if (analogRead(K1_Pin) == LOW)
    {
      Serial.println("IRQ");
      if (led == 1)
        turnOffLed(); //关闭灯泡
      else
        turnOnLed(); //打开灯泡
    }
  }
}

void turnOnLed() //打开灯泡
{
  Serial.println("Turn ON");
  led = 1;
  digitalWrite(LED_Pin, LOW);
}

void turnOffLed() //关闭灯泡
{
  Serial.println("Turn OFF");
  led = 0;
  digitalWrite(LED_Pin, HIGH);
}

void setup()
{
  Serial.begin(115200);
  pinMode(LED_Pin, OUTPUT);      
  pinMode(K1_Pin, INPUT_PULLUP);      
  attachInterrupt(digitalPinToInterrupt(K1_Pin), keyscan, FALLING); // 中断
}

void loop()
{

}


发表于 2022-5-23 16:10 | 显示全部楼层
把void keyscan() 改为:
void ICACHE_RAM_ATTR keyscan()
发表于 2022-5-22 15:30 | 显示全部楼层
中断不仅没有中断头,还用delay
 楼主| 发表于 2022-5-22 18:04 | 显示全部楼层
XlinliY.Zhang 发表于 2022-5-22 15:30
中断不仅没有中断头,还用delay

没有中断头,不是设置这个就好吗?
  pinMode(K1_Pin, INPUT_PULLUP);      
  attachInterrupt(digitalPinToInterrupt(K1_Pin), keyscan, FALLING); // 中断
初入门,真的搞不懂,这是人家的示例,莫想到也是坑。
 楼主| 发表于 2022-5-24 18:38 | 显示全部楼层
lwq1947 发表于 2022-5-23 16:10
把void keyscan() 改为:
void ICACHE_RAM_ATTR keyscan()

谢谢!问题已经解决!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2025-1-1 20:04 , Processed in 0.073544 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表