ESP8266(ESP12F)中断报错 - ISR not in IRAM解决
Posted GenCoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266(ESP12F)中断报错 - ISR not in IRAM解决相关的知识,希望对你有一定的参考价值。
ESP8266可以在Arduino IDE平台上编写中断,当使用外部中断并且成功编译烧写后,ESP8266出现不断重启并且串口一直重复打印堆栈信息如下:
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 3ffef58c
3fffff10: 000000fe 00000000 00000000 00000000
3fffff20: 00000000 00000000 00000000 00ff0000
3fffff30: 5ffffe00 5ffffe00 3ffe87fa 3ffee754
3fffff40: 00000000 00000002 00000002 40202bda
3fffff50: 401006f9 3ffe87f9 3ffee6ec 40202bec
3fffff60: 40201f78 3ffe87f9 00000002 402037ed
3fffff70: 3fffdad0 00000020 3ffee6ec 402021ec
3fffff80: 3fffdad0 00000000 3ffee6ec 4020388c
3fffff90: 3fffdad0 00000000 3ffee6ec 402010a4
3fffffa0: feefeffe 00000000 3ffee740 40202768
3fffffb0: feefeffe feefeffe 3ffe85e0 40100fb5
<<<stack<<<
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
解决方法参考 ESP8266 Arduino Core 开发说明,在 attachInterrupt
调用的中断函数定义前面添加 IRAM_ATTR
属性
demo代码如下
/**
* 功能描述:ESP8266中断演示
*/
void setup()
//设置串口波特率
Serial.begin(115200);
//设置中断号、响应函数、触发方式
attachInterrupt(digitalPinToInterrupt(D2), InterruptFunc, RISING);
void loop()
/**
* 中断响应函数
*/
IRAM_ATTR void InterruptFunc()
Serial.println("Hello ESP8266");
在中断函数前添加属性后,中断可以正常运行
以上是关于ESP8266(ESP12F)中断报错 - ISR not in IRAM解决的主要内容,如果未能解决你的问题,请参考以下文章
ESP8266(ESP12F)学习笔记2 -- NTP网络时间获取
ESP8266 中断(Interrupts)和计时器(Timers)功能介绍