You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决Arduino中DallasTemperature库的‘yield’未声明作用域错误

解决DallasTemperature库中‘yield()’未声明的编译错误

这个错误的核心原因是编译器找不到yield()函数的定义——yield()是Arduino核心库提供的函数,用于在循环中释放资源给后台任务,但有些开发环境(比如旧版Arduino核心、自定义编译环境)可能没有自动引入包含该函数声明的头文件,而DallasTemperature 3.9.0版本的代码默认假设环境会支持这个函数,从而导致编译失败。

下面是几个可以快速解决问题的方案:

方案1:在你的代码开头添加Arduino核心头文件

这是最简单的解决方法,直接在现有代码最顶部引入Arduino.h,它包含了yield()的声明,让编译器能找到这个函数。修改后的代码如下:

#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature tempSensor(&oneWire);

void setup() {
 Serial.begin(9600);
}

void loop() {
 tempSensor.requestTemperatures();
 float temperatureC = tempSensor.getTempCByIndex(0);
 Serial.println(temperatureC);
}

方案2:修改DallasTemperature库的源代码

如果方案1无效,你可以直接修改库文件来添加函数声明:

  1. 找到你本地的DallasTemperature.cpp文件(路径就是你报错里的/home/myuser/sketchbook/libraries/DallasTemperature/DallasTemperature.cpp
  2. 在文件最顶部添加一行代码:
#include <Arduino.h>

或者也可以直接添加yield()的外部声明:

extern void yield(void);

保存后重新编译即可。

方案3:降级DallasTemperature库版本

DallasTemperature 3.9.0版本才引入了yield()的使用,如果你不想修改代码或库文件,可以尝试降级到3.8.0版本(这个版本没有使用yield()函数):

  • 在Arduino IDE中打开库管理器,找到DallasTemperature库
  • 选择“选择版本”,然后选中3.8.0并安装
  • 重新编译你的代码

以上三个方案都能解决这个编译错误,优先尝试方案1,它最快捷且不需要修改库文件。

内容的提问来源于stack exchange,提问作者Stimou

火山引擎 最新活动