查看: 517|回复: 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()
{

}


签到天数: 508 天

[LV.9]以坛为家II

发表于 2022-5-23 16:10 | 显示全部楼层
把void keyscan() 改为:
void ICACHE_RAM_ATTR keyscan()

签到天数: 72 天

[LV.6]常住居民II

发表于 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()

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

本版积分规则

热门推荐

Arduino IDE助手,【支持中文代码】和自动完成
Arduino IDE助手,【支持
最近在学习arduino,发现代码框不支持自动完成列表,故做了这个辅助编辑器。支持中文
【干货分享】mega2560原理图PCB图纸altium designer18
【干货分享】mega2560原理
分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
【花雕动手做】有趣好玩音乐可视化(14)---水杯水瓶灯
【花雕动手做】有趣好玩音
偶然心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较
求大佬指导气流传感器怎么编代码呢
求大佬指导气流传感器怎么
新手求助!端口不显示的问题
新手求助!端口不显示的问
我的板子连到电脑上没有显示端口,试过安装ch340和驱动精灵都识别不出来,数据线也换
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表