ESP8266(ESP12F)中断报错 - ISR not in IRAM解决

本文介绍了如何在使用ESP8266进行Arduino IDE开发时,遇到ISRnotinIRAM问题的解决方案。通过在中断函数前添加IRAM_ATTR属性,解决了ESP8266因外部中断导致的不断重启和重复打印堆栈信息问题,确保了中断的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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");
}

在中断函数前添加属性后,中断可以正常运行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值