乐鑫技术交流
直播中

小芳

12年用户 924经验值
私信 关注
[问答]

有没有什么办法可以避免ESP8266集成的循环功能?

你好呀!有没有什么办法可以避免ESP8266集成的循环功能?
我的意思是用与在大多数 Atmel MCU 中实现它相同的方式来实现它,利用速度处理器。
这将是示例代码,这里是指向 AVR Freaks 网站上关于该主题的帖子的链接。
代码:全选void setup() {
  
   pinMode(LED_BUILtiN, OUTPUT);

      while(true) {  
         digitalWrite(LED_BUILTIN, HIGH);
         digitalWrite(LED_BUILTIN, LOW);
      }
}

错误信息:


                        只需使用一个空的 loop() :
代码:全选void loop() {}



               

回帖(1)

王越建

2024-6-4 16:54:44
对于ESP8266,可以使用回调函数的方式来实现循环功能,而不是使用while(true)的死循环。可以使用ESP8266的定时器功能,设置一个定时器中断,每次定时器到达时间时就会触发回调函数,从而实现循环功能。这种方式可以充分利用ESP8266的高速处理器,而不会浪费处理器资源。以下是一个示例代码:全选const int LED_PIN = 2; // LED引脚号

hw_timer_t * timer = NULL;

void IRAM_ATTR onTimer() {
    static bool ledState = false;
    digitalWrite(LED_PIN, ledState ? HIGH : LOW);
    ledState = !ledState;
}

void setup() {
    pinMode(LED_PIN, OUTPUT);

    // 初始化定时器
    timer = timerBegin(0, 80, true); // 分频器80,计数器0
    timerAttachInterrupt(timer, &onTimer, true); // 注册回调函数
    timerAlarmWrite(timer, 1000000, true); // 定时器周期1秒
    timerAlarmEnable(timer); // 启动定时器
}

void loop() {
    // 在这里执行其他任务
}

在这个示例中,我们初始化了一个定时器,并注册了一个onTimer回调函数。在setup函数中,我们将定时器周期设置为1秒,并启动定时器。在loop函数中,我们可以执行其他任务,而不用担心while(true)这种死循环占用了处理器资源。每次定时器到达时间时,就会触发onTimer函数,从而实现循环功能。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分