当前位置:  开发笔记 > 程序员 > 正文

arduino` yield()`函数的秘密是什么?

如何解决《arduino`yield()`函数的秘密是什么?》经验,为你挑选了1个好方法。

关于到期yield()日,Arduino文档在https://www.arduino.cc/en/Reference/Scheduler上解释.显然它是Scheduler库的一部分:

#include 

但是,我可以调用yield()我的Nano或ESP8266而不包括Scheduler lib - 但仅限于我的主程序,而不是包含文件.此外,包含不适用于我的非会费.

我错过了yield()什么秘密,或者yield()除了Due之外在Arduino平台上做了什么?



1> Danny_ds..:

但是,我可以在Nano或ESP8266上调用yield()而不包括Scheduler lib

yield()功能也在ESP8266库中实现:

生产

这是ESP8266与更经典的Arduino微控制器之间最重要的差异之一.ESP8266在后台运行许多实用功能 - 保持WiFi连接,管理TCP/IP堆栈以及执行其他任务.阻止这些功能运行可能导致ESP8266崩溃并自行重置.为了避免这些神秘的重置,请避免在草图中使用长的阻塞循环.

ESP8266 Arduino库的惊人创建者还实现了yield()函数,该函数调用后台函数以允许它们执行其操作.

这就是为什么你可以yield()在主程序中调用包含ESP8266标头的原因.

参见ESP8266事情连接指南.

更新:

yield() 在Arduino.h中定义为:

void yield(void);

yield()也声明hooks.h如下:

/**
 * Empty yield() hook.
 *
 * This function is intended to be used by library writers to build
 * libraries or sketches that supports cooperative threads.
 *
 * Its defined as a weak symbol and it can be redefined to implement a
 * real cooperative scheduler.
 */
static void __empty() {
    // Empty
}
void yield(void) __attribute__ ((weak, alias("__empty")));

所以,在它上面Nano,它可能什么都不做(除非你有其他库#included).

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有