在ESP8266的中断学习中,出现单片机不断重启的情况。其原因是没有使中断回调函数位于IRAM。因此在中断处理函数前加入ICACHE_RAM_ATTR 用于定义其属性为IRAM中方可解决此问题。
IRAM:internal ram 内部RAM,指的是集成到SoC内部的RAM
将D4设置为上升沿出发中断代码示例-基于VSCODE的Arduino环境
#include <Arduino.h>
uint8_t count1 = 0;
void interrupt4(void); //函数声明
void setup(void) //初始化函数
{
pinMode(D4,INPUT); //D4模式设置
attachInterrupt(D4,interrupt4,RISING); //设置为上升沿中断
pinMode(LED_BUILTIN,OUTPUT); //灯脚设置为输出
digitalWrite(LED_BUILTIN,HIGH); //初始化为高电平,熄灭
}
void loop(void) //循环
{
if(count1 == 5)
{
digitalWrite(LED_BUILTIN,LOW);
}
else if(count1 == 10)
{
digitalWrite(LED_BUILTIN,HIGH);
}
}
ICACHE_RAM_ATTR void interrupt4() //中断函数
{
count1++;
if(count1>10)
{
count1=0;
digitalWrite(LED_BUILTIN,HIGH);
}
}
文章讲述了在ESP8266开发中遇到的单片机因中断处理函数未置于IRAM而频繁重启的问题,通过在中断函数前添加ICACHE_RAM_ATTR来确保函数在内部RAM执行,以避免重启现象。
1749

被折叠的 条评论
为什么被折叠?



